java 数据库基本操作 `<d }V2rdz
1、java数据库操作基本流程 13x p_j
2、几个常用的重要技巧: `VguQl_,gA
可滚动、更新的记录集 b4N[)%@
批量更新 7B66]3v
事务处理 X!EP$!
8YSAf+{FtK
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 :^h$AWR^f
1、取得数据库连接 -zfR)(zG
1)用DriverManager取数据库连接 z<' u1l3
例子 tc_ 3sC7jN
String className,url,uid,pwd; `r 3
className = "oracle.jdbc.driver.OracleDriver"; .(k|wX[Fu~
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; ;
BHtCuY
uid = "system"; -aCKRN85
pwd = "manager"; O?#7N[7
Class.forName(className); 4{|"7/PE1
Connection cn = DriverManager.getConnection(url,uid,pwd); ^} >w<'0
2)用jndi(java的命名和目录服务)方式 Ml-6OvQ7g
例子 Ab.(7GFK
String jndi = "jdbc/db"; $/Uq0U
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); {]4LULq
DataSource ds = (DataSource) ctx.lookup(jndi); sK?twg;D*|
Connection cn = ds.getConnection(); HJ.-Dg5U
多用于jsp中 KHvYUTY
2、执行sql语句 ,Ma^ &ypH
1)用Statement来执行sql语句 j^RmrOg,
String sql; NC6&x=!3
Statement sm = cn.createStatement(); H3-hcx54T
sm.executeQuery(sql); // 执行数据查询语句(select) e~"U @8xk~
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); ;#< 0<
2)用PreparedStatement来执行sql语句 19%imf
String sql; \1M4Dl5!
sql = "insert into user (id,name) values (?,?)"; 0?|<I{z2
PreparedStatement ps = cn.prepareStatement(sql); NL+N%2XG7
ps.setInt(1,xxx); wi{3/
ps.setString(2,xxx); O+x!Bg7
... +X
88;-
ResultSet rs = ps.executeQuery(); // 查询 yyTnL 2Y9
int c = ps.executeUpdate(); // 更新 ]u/sphPe
h^P#{W!e\
3、处理执行结果 1<aP92/N&
查询语句,返回记录集ResultSet `r 4fm`<
更新语句,返回数字,表示该更新影响的记录数 XC#oB~K'
ResultSet的方法 5~DJWi,
1、next(),将游标往后移动一行,如果成功返回true;否则返回false b4Ekqas
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 +k R4E23:
!ULn7\@
4、释放连接 l,aay-E
cn.close(); xxQ;xI0+]
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection AbW6x
+R75v )
可滚动、更新的记录集 gf\oC> N
1、创建可滚动、更新的Statement +R:(_:7
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); 1s;Saq+
该Statement取得的ResultSet就是可滚动的 &=mtc%mL
2、创建PreparedStatement时指定参数 6j|{`Zd)G
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); j3ls3H&
ResultSet.absolute(9000); 0jWVp-y
批量更新 4E}Yt$|
1、Statement -m#)B~)
Statement sm = cn.createStatement(); SUK?z!f<i
sm.addBatch(sql1); lPAQ3t!,
sm.addBatch(sql2); SSzIih@u
... ,|/f`Pl
sm.executeBatch() %mgE;~"&
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 %iqD5x$OA
2、PreparedStatement Q22 GIr
PreparedStatement ps = cn.preparedStatement(sql); +&H4m=D-#a
{ E' uZA
ps.setXXX(1,xxx); ;}p
... kD"{g#c
ps.addBatch(); hOK8(U0
} n~Lt\K:
ps.executeBatch(); )D%~`,#pQ
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 WUTowr
:.`2^
事务的处理 u9p$YJ
1、关闭Connection的自动提交 %A0/1{(
cn.setAutoCommit(false); ql~J8G9
2、执行一系列sql语句 u_Z+;{]Pj
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close e&>2
n
Statement sm ; F_P~x(X
sm = cn.createStatement(insert into user...); 3o/[t
sm.executeUpdate(); :[d9tm
sm.close(); b|(:[nB
sm = cn.createStatement("insert into corp...); |JsZJ9W+J
sm.executeUpdate(); Y}KNKO;
sm.close(); `kSZX:=};
3、提交 `XDl_E+>l
cn.commit(); RT8 ?7xFc
4、如果发生异常,那么回滚 G^@5H/)
cn.rollback();