java 数据库基本操作 WTv\HI2X
!
1、java数据库操作基本流程 i=H>D
2、几个常用的重要技巧: :42;c:8 5
可滚动、更新的记录集 Mqf}Aiqk;
批量更新 SH$cn,3F8
事务处理 cYy@
A<CXd t+t
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 ff./DMDafI
1、取得数据库连接 cBR8HkP~
1)用DriverManager取数据库连接 wK`ieHmp
例子 R6Z}/ m
String className,url,uid,pwd; M#=5u`h
className = "oracle.jdbc.driver.OracleDriver"; ~2DV{dyj
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; ~w9=Fd6
uid = "system"; MGKeD+=5
pwd = "manager"; 2$W,R/CLh
Class.forName(className); aa%&&
Connection cn = DriverManager.getConnection(url,uid,pwd); n9fA!Wic
2)用jndi(java的命名和目录服务)方式 JP,(4h*
例子 iA{jKk=
String jndi = "jdbc/db"; r5da/*G/O
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); ~G:2iSi(#
DataSource ds = (DataSource) ctx.lookup(jndi); v[DbhIXU
Connection cn = ds.getConnection(); *[~o~e/YCb
多用于jsp中 C5PBfn<j
2、执行sql语句 nC.2./OwMf
1)用Statement来执行sql语句 !v4j`A;%
String sql; bKJ7vXC05
Statement sm = cn.createStatement(); yO,`"Dc_0
sm.executeQuery(sql); // 执行数据查询语句(select) {r2|fgi
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); zpr@!76
2)用PreparedStatement来执行sql语句 o"}&qA;
String sql; n.XhK_6n]M
sql = "insert into user (id,name) values (?,?)"; 5~%,u2
PreparedStatement ps = cn.prepareStatement(sql); A1t~&?
ps.setInt(1,xxx); u#@{%kPW
ps.setString(2,xxx); HGQ?(2] 8$
... ^8l3j4
ResultSet rs = ps.executeQuery(); // 查询 C"^hMsU8
int c = ps.executeUpdate(); // 更新 X8SRQO^
r{2].31'
3、处理执行结果 V52C,]qQH
查询语句,返回记录集ResultSet ie~fQ!rf
更新语句,返回数字,表示该更新影响的记录数 h k!,
ResultSet的方法 QT= ,En
1、next(),将游标往后移动一行,如果成功返回true;否则返回false sqpOS!]
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 hB}h-i(u
]baaOD$Z
4、释放连接 ]F*a PV
cn.close(); m_Ac/ctf
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection Ao,!z
O][Nl^dl
可滚动、更新的记录集 [+MX$y
1、创建可滚动、更新的Statement Xz.Y-5)
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); "3i80R\w`F
该Statement取得的ResultSet就是可滚动的 2
ssj(Qo
2、创建PreparedStatement时指定参数 fxoi<!|iGY
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); Ag4Ga?&8ec
ResultSet.absolute(9000); YyJ{
批量更新 Z'*Z@u3
1、Statement 87pXv6'FQ
Statement sm = cn.createStatement(); !MJe+.
sm.addBatch(sql1); *zVLy^L_8
sm.addBatch(sql2); ;y~{+{{Ow
... 7}cDGdr
sm.executeBatch() D@\;@(
|
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 H9san5{
2、PreparedStatement c6Aut`dK
PreparedStatement ps = cn.preparedStatement(sql); "ryk\}*<
{ ^L-w(r62<
ps.setXXX(1,xxx); #;"D)C
... r -q3+c^+
ps.addBatch(); iA3>X-x
} ){
ps.executeBatch(); }uI7\\S
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 #3Ej0"A@-B
c@ZS|U*(
事务的处理 w*u{;v#
1、关闭Connection的自动提交 8 ih;#I=q
cn.setAutoCommit(false); pPyvR;NJ
2、执行一系列sql语句 Q-8'?S
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close 3 IWLBc
Statement sm ; '-PMF~~S
sm = cn.createStatement(insert into user...); )o9Q5Lq
sm.executeUpdate(); :K^gu%,&$
sm.close(); v"~Do+*+
sm = cn.createStatement("insert into corp...); 46K&$6eN
sm.executeUpdate(); sP?$G8-^
sm.close(); W[>iJJwz
3、提交 )v52y8G-p
cn.commit();
4j@i%
4、如果发生异常,那么回滚 \/*Nf?;
cn.rollback();