java 数据库基本操作 yKO84cSl
1、java数据库操作基本流程 eBTy!!
2、几个常用的重要技巧: ^c1I'9(r5
可滚动、更新的记录集 #ZIV>(Q\H
批量更新 /h0<0b?i
事务处理 '[p~|
mX
$2F*p#l(<Z
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 unmuY^+<
1、取得数据库连接 _tQ=ASe0
1)用DriverManager取数据库连接 /n7F]Ok'*
例子 4yC{BRbi
String className,url,uid,pwd; VG'oy
className = "oracle.jdbc.driver.OracleDriver"; Q=yQEh|Y
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; Dd*T5A?
uid = "system"; HPAg1bV:-
pwd = "manager"; }0uSm%,"
Class.forName(className); Y}"|J ~
Connection cn = DriverManager.getConnection(url,uid,pwd); R,A|"Q
2)用jndi(java的命名和目录服务)方式 gv;=Yhw.c
例子 ?x@B Ze
String jndi = "jdbc/db"; ~?aq=T
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); |rf\]3 F
DataSource ds = (DataSource) ctx.lookup(jndi); gtz!T2%
Connection cn = ds.getConnection(); hX=+%^c%_A
多用于jsp中 "HVwm>qEi
2、执行sql语句 B[-%A!3
F
1)用Statement来执行sql语句 SGH"m/ e
String sql; ?M7nbfy[A@
Statement sm = cn.createStatement(); V0L^pDLOV
sm.executeQuery(sql); // 执行数据查询语句(select) =[`wyQe`_
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); U;KHF{Vm
2)用PreparedStatement来执行sql语句 j2#Vdw|j
String sql; H(]lqvO
sql = "insert into user (id,name) values (?,?)"; bE^Z;q19
PreparedStatement ps = cn.prepareStatement(sql); ']f]:X;6w
ps.setInt(1,xxx); T~%5^+[h
ps.setString(2,xxx); 7F3Hkvd[k
... ]k{cPK
ResultSet rs = ps.executeQuery(); // 查询 ZzI^*Nyg
int c = ps.executeUpdate(); // 更新 M!=v"C#
sEdWBT 8
3、处理执行结果 l~&efAJ-$
查询语句,返回记录集ResultSet QA.B.U7!
更新语句,返回数字,表示该更新影响的记录数 f9JD_hhP'
ResultSet的方法 V:!fe+Er
1、next(),将游标往后移动一行,如果成功返回true;否则返回false .gT@_.ZD9
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 QE!cf@~n"
5cyl:1Ln
4、释放连接 3Du&KZ
cn.close(); |MMr}]`
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection UNYU2ze'
"=|yM~V
可滚动、更新的记录集 yN~=3b>
1、创建可滚动、更新的Statement *kL1r
w6
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); Qkqn~>
该Statement取得的ResultSet就是可滚动的 5jy>)WqK
2、创建PreparedStatement时指定参数 >g93Bj*
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); KfWVz*DC!
ResultSet.absolute(9000); %<DRrKt
批量更新 :!tQqy2
1、Statement MkJL9eG
Statement sm = cn.createStatement(); H7#RL1qM&
sm.addBatch(sql1); -mX
_I{BJ
sm.addBatch(sql2); 9z_Gf]J~
... {(7.X4\x
sm.executeBatch() R) @k|
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 N4fuV?E`
2、PreparedStatement |EU}&