java 数据库基本操作 /2Q@M>
1、java数据库操作基本流程 OLp;eb1g
2、几个常用的重要技巧: J-yj&2
可滚动、更新的记录集 {U/a h2*
批量更新 0 UdAF
事务处理 #
Un>g4>Rh
:I*G tq
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 7) aitDD
1、取得数据库连接 o\6A]T=R
1)用DriverManager取数据库连接 f.SV-{O_
例子 x@/ N9*
String className,url,uid,pwd; f Glvx~
className = "oracle.jdbc.driver.OracleDriver"; Gu?OyL
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; %GG:F^X#
uid = "system";
c]3% wL
pwd = "manager"; f6@fi`U,
Class.forName(className); $ J}d6%
Connection cn = DriverManager.getConnection(url,uid,pwd); @y?<Kv}s
2)用jndi(java的命名和目录服务)方式
&0! f_
例子 4Rj;lAlwB
String jndi = "jdbc/db"; ,5`pe%W7
Context ctx = (Context) new InitialContext().lookup("java:comp/env");
KKpO<TO
DataSource ds = (DataSource) ctx.lookup(jndi); @=4K%SCw
Connection cn = ds.getConnection(); Rrh?0qWs
多用于jsp中 \l)<NZ\
2、执行sql语句 ODa+s>a`^
1)用Statement来执行sql语句 "|<6bA
String sql; X-,scm
Statement sm = cn.createStatement(); 3{OY&
sm.executeQuery(sql); // 执行数据查询语句(select) ,Yx"3i,
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close();
L7oLV?k
2)用PreparedStatement来执行sql语句 jzCSxuZ7O
String sql; CGmObN8~'F
sql = "insert into user (id,name) values (?,?)"; M\\t)=q
PreparedStatement ps = cn.prepareStatement(sql); 49.
@Uzo
ps.setInt(1,xxx); 1haNca_6,
ps.setString(2,xxx); mRVE@pc2X
... U^+xCX<
ResultSet rs = ps.executeQuery(); // 查询 wc@X:${
int c = ps.executeUpdate(); // 更新 .PjJ g^^
/Xa_Xg7
3、处理执行结果 ^Qrezl&
查询语句,返回记录集ResultSet .u[hK
更新语句,返回数字,表示该更新影响的记录数 FgA'X<
ResultSet的方法 )c~1s
1、next(),将游标往后移动一行,如果成功返回true;否则返回false /HCd52
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 rw>X JE
IO/%X;Y_
4、释放连接 R1$O )A}k
cn.close(); ;e~Z:;AR
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection VK)1/b=yT
UykOQ-2-n
可滚动、更新的记录集 l-|hvv5g
1、创建可滚动、更新的Statement oS3}xT "
U
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); \Y;LbB8D
该Statement取得的ResultSet就是可滚动的 ND);7
2、创建PreparedStatement时指定参数 Np$peT[
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); 7)iB6RBK
ResultSet.absolute(9000); &.XYI3Ab1
批量更新 R7axm<PR=
1、Statement =fA*b
Statement sm = cn.createStatement(); MLD-uI10{
sm.addBatch(sql1); !&4<"wQ
sm.addBatch(sql2); "XQj~L
... }<?1\k
sm.executeBatch() 9nW/pv
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 9[.vtk\iyH
2、PreparedStatement a3}#lY):
PreparedStatement ps = cn.preparedStatement(sql); GMc{g
{ ma4Pmk
ps.setXXX(1,xxx); [Y@?l]&