java 数据库基本操作 wz:w6q
1、java数据库操作基本流程 \\"CgH-
2、几个常用的重要技巧: ,.gI'YPQC
可滚动、更新的记录集 4x/u$Ixzh=
批量更新 `UkjrMO
事务处理 &)~LGWBdC
xA}{ZnTbN
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 i079 V
1、取得数据库连接
q,'~=Y5
1)用DriverManager取数据库连接 D t]FmU
例子 Hc
q@7g
String className,url,uid,pwd; HOPsp
className = "oracle.jdbc.driver.OracleDriver"; =4x-x nA
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; LGCeYXic
uid = "system"; %ZlnGr
pwd = "manager"; y2C/DyuAY|
Class.forName(className); 5_L43-
Connection cn = DriverManager.getConnection(url,uid,pwd); o{|
|Ig
2)用jndi(java的命名和目录服务)方式 MD+eLA7
例子 PzLV}
String jndi = "jdbc/db"; -1!s8G
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); AWmJm)
DataSource ds = (DataSource) ctx.lookup(jndi); qSVg.<+
Connection cn = ds.getConnection(); `,wX&@sN
多用于jsp中 l%xeM!}
2、执行sql语句 klj.\wg/p{
1)用Statement来执行sql语句 Au?(_*/0
String sql; Yr:$)ap
Statement sm = cn.createStatement(); *-_joAWTG
sm.executeQuery(sql); // 执行数据查询语句(select) _lk5\bu
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); |VoYFoiQ
2)用PreparedStatement来执行sql语句 =u&NdMy
String sql; W!Rr_'yFe)
sql = "insert into user (id,name) values (?,?)"; ,H su;I~
PreparedStatement ps = cn.prepareStatement(sql); ~U4;YlQP
ps.setInt(1,xxx);
ZW8;?#_
ps.setString(2,xxx); DZ;2aH
... (WS<6j[q
ResultSet rs = ps.executeQuery(); // 查询 SYK?5_804
int c = ps.executeUpdate(); // 更新 (pQ$<c
^m^,:]I0P
3、处理执行结果 O$peCv
查询语句,返回记录集ResultSet S>?B)
更新语句,返回数字,表示该更新影响的记录数 *WXqN!:
ResultSet的方法 %u$dN9cw
1、next(),将游标往后移动一行,如果成功返回true;否则返回false nHF
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 Jc9^Hyqu&
[6Nzz]yy
4、释放连接 3nkO+qQ
cn.close(); 'P)[=+O?t
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection CQ%yki
>qIZ
可滚动、更新的记录集 C;!h4l7L
1、创建可滚动、更新的Statement P~*v}A
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); <Xj
,>2m;
该Statement取得的ResultSet就是可滚动的 Aq P\g k
2、创建PreparedStatement时指定参数 l_*:StyR+
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); X`n*M]
ResultSet.absolute(9000); g.O? 1bebe
批量更新 |a[ :L
1、Statement e?b<-rL
Statement sm = cn.createStatement(); $L$GI~w/
sm.addBatch(sql1); p/uOCQ|1l
sm.addBatch(sql2); QWxl$%`89<
... kPZ1OSX
sm.executeBatch() !' @
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 ,k3aeM~`%w
2、PreparedStatement !HHbd|B_
PreparedStatement ps = cn.preparedStatement(sql); ?{6[6T
{ SjOIln
ps.setXXX(1,xxx); @-qC".CI
... ()i!Uo
ps.addBatch(); QJ-?67_i
} !J@pox-t
ps.executeBatch(); `<l|XPv
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 ,TxZ:f`"
uv
dx>5]
事务的处理 A&fh0E (t
1、关闭Connection的自动提交 c)o[3o7
cn.setAutoCommit(false); ]^\+B4
2、执行一系列sql语句 q&wXs