java 数据库基本操作 Vs@[="
1、java数据库操作基本流程 CZ&VP%
2、几个常用的重要技巧: PDN3=PAR/A
可滚动、更新的记录集 .48Csc-
批量更新 E]eVoC
事务处理 3I0=^>A
gG"W~O)yv
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 4wp5ghe
1、取得数据库连接 D)C^'/8q
1)用DriverManager取数据库连接 &8VB{S>r
例子 b[+G+V
String className,url,uid,pwd; ^7Sk`V
className = "oracle.jdbc.driver.OracleDriver"; [I/f(GK
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; 4`Com~`6"
uid = "system"; @C[]o.r
pwd = "manager"; Y1e>P
Class.forName(className); !uaV6K
Connection cn = DriverManager.getConnection(url,uid,pwd); 6ww4ZH?j
2)用jndi(java的命名和目录服务)方式 aLr\Uq,83
例子 m1,?rqeb
String jndi = "jdbc/db"; 1J$sIY,Ou
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); yEYlQ= [#
DataSource ds = (DataSource) ctx.lookup(jndi); OVr,
{[r
Connection cn = ds.getConnection(); TR2X' `:O
多用于jsp中 CX](^yU_
2、执行sql语句 CKJ9YKu{W
1)用Statement来执行sql语句 L,!3
String sql; Jpi\n-
d!
Statement sm = cn.createStatement(); "[f"h
sm.executeQuery(sql); // 执行数据查询语句(select) V}?d
,.m`{
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); )$18a
2)用PreparedStatement来执行sql语句 >T'=4n['
String sql; *>otz5]
sql = "insert into user (id,name) values (?,?)"; C.SGm
PreparedStatement ps = cn.prepareStatement(sql); __x2xtrH
ps.setInt(1,xxx); q,b6).
ps.setString(2,xxx); z}I4m
... e[txJ*SuO
ResultSet rs = ps.executeQuery(); // 查询 x!6&)T?!n
int c = ps.executeUpdate(); // 更新 U@#YKv
H.\gLIr
3、处理执行结果 C>%2'S^.b
查询语句,返回记录集ResultSet #$!(8>YJ
更新语句,返回数字,表示该更新影响的记录数 kpc3l[.A
ResultSet的方法 HJFt{tq2
1、next(),将游标往后移动一行,如果成功返回true;否则返回false Vc}#Ok
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 wc#+Yh6
S*3N6*-l"
4、释放连接 dz^l6<a"n
cn.close(); 1pe eecE
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection DP E NYr
+T}:GBwD7
可滚动、更新的记录集 \0&7^
1、创建可滚动、更新的Statement :',.I
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); \@yx;}bdI
该Statement取得的ResultSet就是可滚动的 2-G he3
2、创建PreparedStatement时指定参数 1~!
4
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); j3j<01rq
ResultSet.absolute(9000); #=)(t${7'
批量更新 4]c.mDo[T
1、Statement =-#>NlB$w
Statement sm = cn.createStatement();
D{hsa
sm.addBatch(sql1); o*5<Cxg
sm.addBatch(sql2); QR'yZ45n4
... !<!5;f8
sm.executeBatch() <