java 数据库基本操作 [2FXs52
1、java数据库操作基本流程 5o72X k
2、几个常用的重要技巧: >)5vsqGZaK
可滚动、更新的记录集 ;J5oO$H+68
批量更新 j2\G1@05
事务处理 K^>qn,]H'
&G"]v]V
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 XSxya.1
1、取得数据库连接 3(}?f
1)用DriverManager取数据库连接 A5/h*`Q\\
例子 '{+hti,Lh
String className,url,uid,pwd; /0\pPc*kA{
className = "oracle.jdbc.driver.OracleDriver"; (&gCVf
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; !l\pwfXP&%
uid = "system"; UbYKiLDF)
pwd = "manager"; ,J~1~fg89
Class.forName(className); Bo0y"W[+
Connection cn = DriverManager.getConnection(url,uid,pwd); $`5DGy ?RU
2)用jndi(java的命名和目录服务)方式 u3<])}I'
例子 Z6*RIdD>
String jndi = "jdbc/db"; utTek5/
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); Q3KBG8
DataSource ds = (DataSource) ctx.lookup(jndi); r;'!qwr
Connection cn = ds.getConnection(); s=d?}.E$
多用于jsp中 j=gbUXv/
2、执行sql语句 EP8LJzd"
1)用Statement来执行sql语句 mb/3
#)
String sql; O^<6`ku
Statement sm = cn.createStatement(); P9'5=e@jB
sm.executeQuery(sql); // 执行数据查询语句(select) m2}&5vD8-
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); %EpK=;51U
2)用PreparedStatement来执行sql语句 vx4&
;2
String sql; Hv=coS>g:
sql = "insert into user (id,name) values (?,?)"; \.{JS>!
PreparedStatement ps = cn.prepareStatement(sql); YW'Y=*
ps.setInt(1,xxx); _9-Ajv
ps.setString(2,xxx); ~q4y'dBy*
... [6Wr
t8"
ResultSet rs = ps.executeQuery(); // 查询 EtL=_D-
int c = ps.executeUpdate(); // 更新 4-"wFp
XmnqZWB
3、处理执行结果 F?dTCa
查询语句,返回记录集ResultSet 980+Y
更新语句,返回数字,表示该更新影响的记录数 ^*r${Nj
ResultSet的方法 Oh^X^*I$@
1、next(),将游标往后移动一行,如果成功返回true;否则返回false 8%NX)hZyq}
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 q"cFw${
^g0 Ig2'
4、释放连接 E`s_Dr}K
cn.close(); pQ/:*cd+M
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection yO($KL+
Z5U~g?
可滚动、更新的记录集 PY2`RZ/ @
1、创建可滚动、更新的Statement y#MLxm
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); oO|^ [b#
该Statement取得的ResultSet就是可滚动的 FFkG,XH
2、创建PreparedStatement时指定参数 >}I}9y+
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); #[si.rv->
ResultSet.absolute(9000); U!'lc}5
批量更新 5FzRusNiA
1、Statement L=p.@VSZ
Statement sm = cn.createStatement(); r" D |1
sm.addBatch(sql1); c`>\R<Z ]
sm.addBatch(sql2); xvkof
'Q)
... yO6i "3
sm.executeBatch() -`RJk(
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 Y!`?q8z$G
2、PreparedStatement V.4j?\#%
PreparedStatement ps = cn.preparedStatement(sql); 5[3hw4
{ MPB6
ps.setXXX(1,xxx); zZxP=
c
... T'V(%\w
ps.addBatch(); }J*&()`
} ^4[\-L8Lpq
ps.executeBatch(); )_=&)a1U
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 oY]VP+b!
3UaP7p+d
事务的处理 j\vK`.z
1、关闭Connection的自动提交 JTI m`t"d=
cn.setAutoCommit(false); .
9
NS
2、执行一系列sql语句 q!,do2T
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close OBl8kH(b>
Statement sm ; ZMe| fn
sm = cn.createStatement(insert into user...); 3 x'30
sm.executeUpdate(); X+3)DE\2
sm.close(); ) &9=)G
sm = cn.createStatement("insert into corp...); sV6A&