java 数据库基本操作 S~k*r{?H})
1、java数据库操作基本流程 .5Knb c
2、几个常用的重要技巧: )XP#W|;
可滚动、更新的记录集 -.{oqs$
批量更新 4N~+G `
事务处理 ,'C30 A*p
p`:*mf
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 $Eio$TI
1、取得数据库连接 JYwyR++uo
1)用DriverManager取数据库连接 xEVLE,*?>
例子 JvfQib
String className,url,uid,pwd; 8VP"ydg-U
className = "oracle.jdbc.driver.OracleDriver"; 7}?k^x,1
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; 2f|6z-Z
uid = "system"; 4O`6h)!NQ
pwd = "manager"; % Cu.u)/+
Class.forName(className); WGh. ;-
Connection cn = DriverManager.getConnection(url,uid,pwd); L\ }Pzxn
2)用jndi(java的命名和目录服务)方式 ]am~aJ|L
例子 6X7s 4
String jndi = "jdbc/db"; Xb]=:x(
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); I( ]BMMj
DataSource ds = (DataSource) ctx.lookup(jndi); T~%H%O(F
Connection cn = ds.getConnection(); IX<r5!
多用于jsp中 ~^I\crx,U%
2、执行sql语句 jow7t\wk
1)用Statement来执行sql语句 OGJ=VQA
String sql; {[2tG U9
Statement sm = cn.createStatement(); }pMP!%|
sm.executeQuery(sql); // 执行数据查询语句(select) 2yln7[a
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); 6ORY`Pe7P|
2)用PreparedStatement来执行sql语句 *me,(C
String sql; xMDrE?
sql = "insert into user (id,name) values (?,?)"; *O@sh
PreparedStatement ps = cn.prepareStatement(sql); }iilzE4oH#
ps.setInt(1,xxx); "v(G7*2
ps.setString(2,xxx); U_}7d"<| ?
... B(j02<-
ResultSet rs = ps.executeQuery(); // 查询 8F zHNG
int c = ps.executeUpdate(); // 更新 ch@x]@-;A3
|JUe>E*
3、处理执行结果 tu\mFHvlg
查询语句,返回记录集ResultSet Ag0]U
更新语句,返回数字,表示该更新影响的记录数 ~ww?Emrw
ResultSet的方法 lDW!Fg
1、next(),将游标往后移动一行,如果成功返回true;否则返回false [kbC'Eh*
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 -IBO5;2_
x*.Ye5Jb
4、释放连接 }B y)y;~
cn.close(); 3{N\A5~
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection [E>R.Oe
fO].e"}
可滚动、更新的记录集 8>UKIdp
1、创建可滚动、更新的Statement Fr-[UZ~V
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); F:%^&%\
该Statement取得的ResultSet就是可滚动的 M
h`CP
2、创建PreparedStatement时指定参数 k$C"xg2
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); - $U@By<SJ
ResultSet.absolute(9000); u]HS(B,ht
批量更新 [2Iau1<@
1、Statement tbq|,"
Statement sm = cn.createStatement(); 6W5d7`A
sm.addBatch(sql1); Lf
>YdD
sm.addBatch(sql2); <