java 数据库基本操作 Zpu>T2Tp
1、java数据库操作基本流程 3: mF!
2、几个常用的重要技巧: 8VMq>-
可滚动、更新的记录集 y"@~5e477$
批量更新 ;=h^"et
事务处理 %HYC-TF#
i7 p#%2
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 3kYUO-qw
1、取得数据库连接 Pq7YJ"Z?:
1)用DriverManager取数据库连接 lZn <v'y
例子 Grjm9tbX}
String className,url,uid,pwd; ZV;#ZXch
className = "oracle.jdbc.driver.OracleDriver"; qx_+mCZ
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; dC,F?^
uid = "system"; |_O; U=2
pwd = "manager"; ,3fw"P$
Class.forName(className); HCHC~FNd
Connection cn = DriverManager.getConnection(url,uid,pwd); 00b
)B g
2)用jndi(java的命名和目录服务)方式 g-*@I`k[
例子 II~D66 bF
String jndi = "jdbc/db"; sF|<m)Kt{W
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); zhN'@Wj'_
DataSource ds = (DataSource) ctx.lookup(jndi); Iupk+x>
Connection cn = ds.getConnection(); b;x^>(It
多用于jsp中 bd)A6a\h
2、执行sql语句 d(To)ly.
1)用Statement来执行sql语句 u1]5qtg"
String sql; ^vG*8,^S=8
Statement sm = cn.createStatement(); [ HNGTde&
sm.executeQuery(sql); // 执行数据查询语句(select) |L`w4;
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); BT#'<!7!
2)用PreparedStatement来执行sql语句 xTAC&OCk^[
String sql; y'4=
sql = "insert into user (id,name) values (?,?)"; ! *pK#
PreparedStatement ps = cn.prepareStatement(sql); o"UqI
ps.setInt(1,xxx); PkG+`N
ps.setString(2,xxx); vaK$j!%FE
... rm"bplLZA
ResultSet rs = ps.executeQuery(); // 查询 W*U\79H
int c = ps.executeUpdate(); // 更新 AeUwih.
4
`?Y/:4
3、处理执行结果 O 6A:0yM4
查询语句,返回记录集ResultSet &+*jTE
更新语句,返回数字,表示该更新影响的记录数 '>`bp25>
ResultSet的方法 pazFVzT
1、next(),将游标往后移动一行,如果成功返回true;否则返回false y!aq}YS
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 Ah)7A|0rT
WfO6Fvx%
4、释放连接 t~@TUTbx
cn.close(); ;TaT=%
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection 0Y!Bb2m
O'idS`
可滚动、更新的记录集 YtIJJH
1、创建可滚动、更新的Statement %
;6e@U}
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); urog.Q
该Statement取得的ResultSet就是可滚动的 }"xC1<]
2、创建PreparedStatement时指定参数 !T
@|9PCp
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); :5CwRg
ResultSet.absolute(9000); *AxKV5[H
批量更新 Gm>8=
=c
1、Statement Bxm^Arc>
Statement sm = cn.createStatement(); x%x[5.CT
sm.addBatch(sql1); 5RlJybN"o
sm.addBatch(sql2); c]xpp;% ]
... g~Q#U;]
sm.executeBatch() pu `|HaQaE
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 2V F|T'h
2、PreparedStatement y f+/Kj<
a
PreparedStatement ps = cn.preparedStatement(sql); ]Fjz+CGg
{ 6o,,w^
ps.setXXX(1,xxx); JLg_oK6
... C{Npipd}v
ps.addBatch(); g<{~f
} =<33(
ps.executeBatch(); vEfX'gyk
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 JBjz2$ZM
L2K4nTA
事务的处理 0n3O;=[aV
1、关闭Connection的自动提交 yil{RfBEr_
cn.setAutoCommit(false); i>e7 5`9
2、执行一系列sql语句 GbNVcP.ocP
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close y< 146
Statement sm ; Vw)\#6FL
sm = cn.createStatement(insert into user...); Q7#Q6-Q
sm.executeUpdate(); Vr5a:u'
sm.close(); -{P)\5.L
sm = cn.createStatement("insert into corp...); TWxMexiW
sm.executeUpdate(); _G'.VSGH
sm.close(); gk]r:p<