java 数据库基本操作 meNz0ve
1、java数据库操作基本流程 BY^5z<^.
2、几个常用的重要技巧: 0vm}[a4+i;
可滚动、更新的记录集 JqYt^,,Q:
批量更新 PFnq:G^L
事务处理
)!(etB=`y
JqmKD4p
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 /Jc i1o
1、取得数据库连接 _ 0Ced&i
1)用DriverManager取数据库连接 bB|P`lL
例子 "sU ~|
String className,url,uid,pwd; [O"8Tzr
className = "oracle.jdbc.driver.OracleDriver"; `OmYz{*r
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; L=WB'*N
uid = "system"; @ag*zl
pwd = "manager"; mrz@Y0mgL
Class.forName(className); ngHPOI16
Connection cn = DriverManager.getConnection(url,uid,pwd); 6$^dOJ_"
2)用jndi(java的命名和目录服务)方式 H0 .,h;
例子 }8cX0mZ1j
String jndi = "jdbc/db"; $1$T2'C~+
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); <"XDIvpc%L
DataSource ds = (DataSource) ctx.lookup(jndi); rCa2$#Z
Connection cn = ds.getConnection(); z7P]g
C$\
多用于jsp中 =q-HR+
2、执行sql语句 ^U4|TR6mub
1)用Statement来执行sql语句 Z6vm!#\
String sql; @|GKNW#
Statement sm = cn.createStatement(); d~b#dcv$"
sm.executeQuery(sql); // 执行数据查询语句(select) vAMr&[
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); jL[
hB
2)用PreparedStatement来执行sql语句 J6Q}a7I#
String sql; DfQD!}=
sql = "insert into user (id,name) values (?,?)"; aY7.<p*a
PreparedStatement ps = cn.prepareStatement(sql); H;OPA8\n
ps.setInt(1,xxx); f:-dw6a=s
ps.setString(2,xxx); Ew kZzVuX
... t846:Z%[
ResultSet rs = ps.executeQuery(); // 查询 a:3f>0_t
int c = ps.executeUpdate(); // 更新 ;c_pa0L
w+0Ch1$
3、处理执行结果 )bGd++2
查询语句,返回记录集ResultSet )4P5i
b
更新语句,返回数字,表示该更新影响的记录数 Qe )#'$T
ResultSet的方法 axW4cS ?
1、next(),将游标往后移动一行,如果成功返回true;否则返回false hj.Du+1
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 sR1
&2hB
br9`77J8
4、释放连接 >O{/%(9
cn.close(); uF=x o`=|
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection yNb
:zoT
sC .R.
可滚动、更新的记录集 {PCf'n
1、创建可滚动、更新的Statement E |A,NPf%I
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); !7K-Kqn
该Statement取得的ResultSet就是可滚动的 xf.2Ig
2、创建PreparedStatement时指定参数 >xt*( j&}
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); MXxE)"G*a
ResultSet.absolute(9000); P00pSRQHD
批量更新 K{&b "Ba1
1、Statement Xkv+"F=-
Statement sm = cn.createStatement(); Qb|.;_
sm.addBatch(sql1); CXsi
sm.addBatch(sql2); Mwdw7MZ"S
... m9Uoq[1
sm.executeBatch() E+&]96*Lby
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 ewn/@;E
2、PreparedStatement |UO1v A@
PreparedStatement ps = cn.preparedStatement(sql); ,A>i)brc
{ /e5Fx
ps.setXXX(1,xxx); jnoFNIW
... a'v%bL;H~
ps.addBatch(); [i '\d}
} DvuL1MeKo
ps.executeBatch(); Z0~}'K
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 @Yq!
,K'}<dm|x
事务的处理 Lu~e^Ul
1、关闭Connection的自动提交 GZN@MK*co
cn.setAutoCommit(false); S %"7`xl
2、执行一系列sql语句 JAA P5ur
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close A/U tf0{3"
Statement sm ; n]B)\D+V^
sm = cn.createStatement(insert into user...); sv^;nOAc
sm.executeUpdate(); mP)<;gm,
sm.close(); pr-{/6j6
sm = cn.createStatement("insert into corp...); QsmG(1=
sm.executeUpdate(); L#e|t0'#
sm.close(); BX),U
3、提交 tc{23Rf%
cn.commit(); b'N"?W^YQ
4、如果发生异常,那么回滚 XU0"f!23x
cn.rollback();