java 数据库基本操作 mTZlrkT
1、java数据库操作基本流程 sFSrMI#R
2、几个常用的重要技巧: Jfo|/JQ
可滚动、更新的记录集 m( B6FPjr
批量更新 L
nw+o}
事务处理 DSd 5?
e Yyl=YW
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 -
CM;sXq
1、取得数据库连接 WVy"MD
1)用DriverManager取数据库连接 P/nXY
例子 Sl:\5]'yJ
String className,url,uid,pwd; -/#3U{O
className = "oracle.jdbc.driver.OracleDriver"; b'3#FI=:
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; MMhd -B1O&
uid = "system"; $N,9e
pwd = "manager"; YlPZa3\
Class.forName(className); #g ~~zwx/N
Connection cn = DriverManager.getConnection(url,uid,pwd); @{+*ea7M(`
2)用jndi(java的命名和目录服务)方式 u>k;PUH4
例子 ynZ!
String jndi = "jdbc/db"; /I[cj3}{+f
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); -d_FB?X
DataSource ds = (DataSource) ctx.lookup(jndi); j|lg&kN
Connection cn = ds.getConnection(); eC[g"Ef
多用于jsp中 o|^0DYb
2、执行sql语句 '?yZ,t
1)用Statement来执行sql语句 }!n<L:njX
String sql; {sX*SbJt
Statement sm = cn.createStatement(); ? 1Z\=s
sm.executeQuery(sql); // 执行数据查询语句(select) tE>3.0U0Q
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); 2q2w o&uK
2)用PreparedStatement来执行sql语句 .?AtW:<*I
String sql; FuEHO 6nx
sql = "insert into user (id,name) values (?,?)"; cTRCQ+W6:
PreparedStatement ps = cn.prepareStatement(sql); pC5-,Z;8
ps.setInt(1,xxx); `q$DNOrS
ps.setString(2,xxx); f8[2$i*cL
... Plm3vk=
ResultSet rs = ps.executeQuery(); // 查询 |7|mnOBdDf
int c = ps.executeUpdate(); // 更新 %*eZoLDg]
U> q&+: +
3、处理执行结果 !ae@g
q'
查询语句,返回记录集ResultSet hH@018+
更新语句,返回数字,表示该更新影响的记录数 ,wRrx&
ResultSet的方法 7yQ r
1、next(),将游标往后移动一行,如果成功返回true;否则返回false .P=!M
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 1$".7}M4$
qn+m lduU
4、释放连接 35&&*$Jm
cn.close(); HL 88
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection !p0FJ].g,
@M,KA {e
可滚动、更新的记录集 Rw$ @%o%
1、创建可滚动、更新的Statement BOh&Db*
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); egr@:5QwZ{
该Statement取得的ResultSet就是可滚动的 r>z8DX@
2、创建PreparedStatement时指定参数 +XY}-
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); dW:
ResultSet.absolute(9000); r 9*{)"
批量更新 XZKOBq B]
1、Statement ghms-.:b8
Statement sm = cn.createStatement(); <<UlFE9"
sm.addBatch(sql1); k{@z87+&
sm.addBatch(sql2); .`hlw'20
... c-M&cU+=L
sm.executeBatch() ~_S`zzcZy4
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 @XmMD6{<