java 数据库基本操作 Pdrz lu
1、java数据库操作基本流程 &NB[:S=
2、几个常用的重要技巧: Ag#p )
可滚动、更新的记录集 W5HC7o\4
批量更新 <G}>Gk8x
事务处理 '!b1~+PV
Nq9@^ E-{M
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 =uMoX
-
1、取得数据库连接 L&. 9.Ll
1)用DriverManager取数据库连接 E{(7]Wri
例子 pN1W|Wv2
String className,url,uid,pwd; <Mxy&9}ic
className = "oracle.jdbc.driver.OracleDriver"; `:R8~>p
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; gX.4I;
uid = "system"; }Q/xBC)
pwd = "manager"; wRi!eN?
Class.forName(className); _LCK|H%v'
Connection cn = DriverManager.getConnection(url,uid,pwd); BQ2DQ7q
2)用jndi(java的命名和目录服务)方式 w)5eD+n\-
例子 &,3.V+Sz
String jndi = "jdbc/db"; |r%6;8A]i
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); zxT&K|
DataSource ds = (DataSource) ctx.lookup(jndi); u\Tq5PYXt
Connection cn = ds.getConnection(); D)K/zh)
多用于jsp中 e#<%`\qH
2、执行sql语句 ikw_t?
1)用Statement来执行sql语句 O{%yO=`r
String sql; yAW%y
Statement sm = cn.createStatement(); <x53b/ft
sm.executeQuery(sql); // 执行数据查询语句(select) [?.k 8;k
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); ,4)zn6tC
2)用PreparedStatement来执行sql语句 }3V Q*'X>i
String sql; _@ev(B
sql = "insert into user (id,name) values (?,?)"; 3tA6r
PreparedStatement ps = cn.prepareStatement(sql); 8%U+y0j6b
ps.setInt(1,xxx); 0\k2F,:%4
ps.setString(2,xxx); "!+q0l1]@
... p*8=($j4
ResultSet rs = ps.executeQuery(); // 查询 ,_F1g<^@u
int c = ps.executeUpdate(); // 更新 -'*B%yy
N0vr>e`
3、处理执行结果 6L}$R`s5H
查询语句,返回记录集ResultSet \L<Hy)l
更新语句,返回数字,表示该更新影响的记录数 VNp[J'a>VZ
ResultSet的方法 DrC4oxS 1
1、next(),将游标往后移动一行,如果成功返回true;否则返回false "6FZX~]s!
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 1I<fp $h
u?&P6|J&
4、释放连接 S)>L 0^M1
cn.close(); =j#uH`jgW
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection j[F\f>
eYOwdTrq
可滚动、更新的记录集 +j%!RS$ko
1、创建可滚动、更新的Statement +A>>Ak|s
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); e)zE*9
该Statement取得的ResultSet就是可滚动的 ?<%GYdus
2、创建PreparedStatement时指定参数 B#OnooJI
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); &l/2[>D%4
ResultSet.absolute(9000); &&nvv &a
批量更新 hV)D,oN3
1、Statement J4;w9[a$
Statement sm = cn.createStatement(); SRRqIQz
sm.addBatch(sql1); !NuiVC]
sm.addBatch(sql2); LkK%DY
... O@ F0UM`!
sm.executeBatch() AVF(YD<U
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 %-/[.DYt
2、PreparedStatement gp`$/ci
PreparedStatement ps = cn.preparedStatement(sql); ~a^mLnY@
{ YNRpIhb
ps.setXXX(1,xxx); f(6`5/C
... /q^)thJ~
ps.addBatch(); 04D>h0yFf
} #.'0DWT\-
ps.executeBatch(); !D!~4h)
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 mCb(B48]%X
%iPWg
事务的处理 Ej~vp2
1、关闭Connection的自动提交 c>6dlWTqX
cn.setAutoCommit(false); G3
rTzMO
2、执行一系列sql语句 YC8wo1;Y!
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close 3"NO"+Q
Statement sm ; ZX'q-JUv f
sm = cn.createStatement(insert into user...); |-a5|3
sm.executeUpdate(); k Pi%RvuQ
sm.close(); U0 nSI
sm = cn.createStatement("insert into corp...); ;wK;
sm.executeUpdate(); MxQhkY-=
sm.close(); Ye% e!
3、提交 ikX"f?Q;S2
cn.commit(); BiT
#bg
4、如果发生异常,那么回滚 9~n`6;R
cn.rollback();