java 数据库基本操作 b/ h,qv
1、java数据库操作基本流程 1GVJ3VXt
2、几个常用的重要技巧: E@aR5S>
可滚动、更新的记录集 %zyO}
批量更新 _* ] ~MQ=
事务处理 n3-u.Fb
PBb@J'b
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 >n)N=Zyu
1、取得数据库连接 V4}9f5FR
1)用DriverManager取数据库连接 RX%*:lXi_
例子 !MNUp(:
String className,url,uid,pwd; w%)=`'s_
className = "oracle.jdbc.driver.OracleDriver"; 6|t4\'
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; BCk$FM@
uid = "system"; E%
Ce/n
pwd = "manager"; nk]jIRy^T
Class.forName(className); Z+@"
Connection cn = DriverManager.getConnection(url,uid,pwd); 2P~zYdjS
2)用jndi(java的命名和目录服务)方式 M;={] w@n
例子 b2.
xJ4
String jndi = "jdbc/db"; {n=)<w
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); z@^l1)m
DataSource ds = (DataSource) ctx.lookup(jndi); 0m6Vf
x
Connection cn = ds.getConnection(); Ps(3X@
多用于jsp中 CE:TQzg
2、执行sql语句 *[(O&L&0
1)用Statement来执行sql语句 fP%hr gL
String sql; >Qz#;HI
Statement sm = cn.createStatement(); l2U"4d!o
sm.executeQuery(sql); // 执行数据查询语句(select) 1g5%Gr/0$5
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); 'H<?K
2)用PreparedStatement来执行sql语句 i2A>T/?{
String sql; 9~bje^M
sql = "insert into user (id,name) values (?,?)"; g= k}6"F~
PreparedStatement ps = cn.prepareStatement(sql); i2/:'
i
ps.setInt(1,xxx); Zh]d&Xeq
ps.setString(2,xxx); yv^j~
... `h/j3fmX?
ResultSet rs = ps.executeQuery(); // 查询 [S9T@Q
int c = ps.executeUpdate(); // 更新 R3<>]/1p|P
c 's=>-X
3、处理执行结果 7-.YVM~R
查询语句,返回记录集ResultSet ?N<* ATCL
更新语句,返回数字,表示该更新影响的记录数 6]rIYc[,
ResultSet的方法 k5]s~*,0
1、next(),将游标往后移动一行,如果成功返回true;否则返回false e'mm4 2
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 !
R?r)G5E
snOd
3Bw
4、释放连接 MQY^#N
cn.close(); [WnX'R R
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection ',?v7&
V03U"eI="
可滚动、更新的记录集 aErms-~
1、创建可滚动、更新的Statement 4<)%Esyb
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); b"t95qlL
该Statement取得的ResultSet就是可滚动的 iXK.QktHw
2、创建PreparedStatement时指定参数 ilEWxr;,
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); 3:7J@>
ResultSet.absolute(9000); -z./6dQ
批量更新 o {Sc
1、Statement j{SRE1tqh
Statement sm = cn.createStatement(); {$)zC*l
sm.addBatch(sql1); r5> FU>7'
sm.addBatch(sql2); oE[wOq+
... j<>E
Fd
sm.executeBatch() #ok1qT9_
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 A&rk5y;
2、PreparedStatement Uc%(#I]Mi
PreparedStatement ps = cn.preparedStatement(sql); b26#0;i
{ fi^I1*S
ps.setXXX(1,xxx); b[<