java 数据库基本操作
HJ5 Ktt
1、java数据库操作基本流程 !97U2L4
2、几个常用的重要技巧: ~|y$^qy?U
可滚动、更新的记录集 zNTcy1Sthk
批量更新 iakqCjV
事务处理 0
0JH*I
.T!R]n
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 ".0~@W0
1、取得数据库连接 =;tDYuFc!
1)用DriverManager取数据库连接 `Uz2(zqS
例子 |76G#K~<X
String className,url,uid,pwd; 6f=,$:S$
className = "oracle.jdbc.driver.OracleDriver"; ~HW8mly'
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; dP[vXhc
uid = "system"; 0EWov~Y?
pwd = "manager"; AQ}(v,DOb
Class.forName(className); &P2tzY'
Connection cn = DriverManager.getConnection(url,uid,pwd); Q4~/Tl;
2)用jndi(java的命名和目录服务)方式 [Eq7!_3
例子 |A .U~P):
String jndi = "jdbc/db"; {TmrWFo
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); n,,hE_
DataSource ds = (DataSource) ctx.lookup(jndi); yT3q~#:
Connection cn = ds.getConnection(); *yx5G-#?
多用于jsp中 YJ6y]r
K2,
2、执行sql语句
_aJo7
1)用Statement来执行sql语句 Z~X \Z.
String sql; vw.rkAGY
Statement sm = cn.createStatement(); oc|%|pmRd<
sm.executeQuery(sql); // 执行数据查询语句(select) F+!w[}0
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); U3UKu/Z
2)用PreparedStatement来执行sql语句 |gV$ks\<
String sql; )># Y,/q
sql = "insert into user (id,name) values (?,?)"; m=m T`EP
PreparedStatement ps = cn.prepareStatement(sql); So6ZNh9
ps.setInt(1,xxx); b\Wlpb=QZ
ps.setString(2,xxx); _%r +?I
... c@|!0
U%j
ResultSet rs = ps.executeQuery(); // 查询 O {hM
int c = ps.executeUpdate(); // 更新 !sTOo
W't?aj I|
3、处理执行结果 K^zu{`S
查询语句,返回记录集ResultSet i>*|k]
更新语句,返回数字,表示该更新影响的记录数 wSV}{9}wr%
ResultSet的方法 /JcfAY
1、next(),将游标往后移动一行,如果成功返回true;否则返回false ~8oti4
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 8D
H~~by
Sa8KCWgWh
4、释放连接 U{`Q_Uw@$:
cn.close(); 7%MD0qm-
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection e7O9q8b
)2pOCAjL2
可滚动、更新的记录集 l_q=@y
1、创建可滚动、更新的Statement &EUI
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); d O})#50f
该Statement取得的ResultSet就是可滚动的 1QA{NAnu&
2、创建PreparedStatement时指定参数 v47S9Vm+
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); V(6*wQ`&
ResultSet.absolute(9000); sxK|0i}6
批量更新 tyI!y~-z
1、Statement $`a>y jma
Statement sm = cn.createStatement(); >b1#dEY
sm.addBatch(sql1); a1Kh
sm.addBatch(sql2); q
HU}EEv
... w=;Jj7}L
sm.executeBatch() %&Fsk]T%:
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 z+5ZUS2~&
2、PreparedStatement `)aIFAW
PreparedStatement ps = cn.preparedStatement(sql); mm1fG4
*%
{ H^d2|E[D
ps.setXXX(1,xxx); _o+z#Fn z
... M+|J;caX
ps.addBatch(); DN X-\
} 7Rq|N$y.3
ps.executeBatch(); n5NwiSE
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 sC}p_'L
78MQoG<
事务的处理 v1j&oA}$.
1、关闭Connection的自动提交 pzcl@
cn.setAutoCommit(false); kq4ii`zi8
2、执行一系列sql语句 8mc0(Z@
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close dSP~R
Statement sm ; K*/X{3 J;
sm = cn.createStatement(insert into user...); c/'Cju W
sm.executeUpdate(); Iq?#kV9)
sm.close(); qlU"v)Mx
sm = cn.createStatement("insert into corp...); /19ZyQw9
sm.executeUpdate(); ]?<=DHn
sm.close(); 6Trtulm
3、提交 !H^e$BA
cn.commit(); T?4I\SG
4、如果发生异常,那么回滚 x| =]Xxco
cn.rollback();