java 数据库基本操作 J4 !Z,-
1、java数据库操作基本流程 :2 QA#
2、几个常用的重要技巧: gS4K](KH |
可滚动、更新的记录集 0b?9LFd
批量更新 31w?bx !Pp
事务处理 &{Uaa
dQ/Xs.8
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 K4,VSy1byI
1、取得数据库连接 i:qc2#O:J
1)用DriverManager取数据库连接 z* zLK[t+
例子 u'yePJTE
String className,url,uid,pwd; [9[tn-
className = "oracle.jdbc.driver.OracleDriver"; v:JFUn}
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; nFw&vR/q
uid = "system"; $`{}4,5M
pwd = "manager"; azj<aaH
Class.forName(className); Y49kq}
Connection cn = DriverManager.getConnection(url,uid,pwd); Vn=J$Uv0
2)用jndi(java的命名和目录服务)方式 qW;nWfkYC
例子 XL EA|#
String jndi = "jdbc/db"; o~mY,7@a
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); >Q[]i4*A
DataSource ds = (DataSource) ctx.lookup(jndi); ;#~rd8Z52
Connection cn = ds.getConnection(); hCQ{D|/
多用于jsp中 q'C'S#qqn
2、执行sql语句 q^"P_pV\
1)用Statement来执行sql语句 .zBSjh_=H
String sql; n." j0kc7=
Statement sm = cn.createStatement(); #uu wzE*M_
sm.executeQuery(sql); // 执行数据查询语句(select) }eEF/o
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); 6&.[:IHw
2)用PreparedStatement来执行sql语句 OWtN=Gk
String sql; XfViLBY(
>
sql = "insert into user (id,name) values (?,?)"; C
[=/40D
PreparedStatement ps = cn.prepareStatement(sql); ZSKk*<=
ps.setInt(1,xxx); &|/C*2A
ps.setString(2,xxx); IL YS:c58=
... T{?!sB3
ResultSet rs = ps.executeQuery(); // 查询 X k<X:,T
int c = ps.executeUpdate(); // 更新 sJ3HH0e
_.?$~;7
3、处理执行结果 Q1buuF#CU&
查询语句,返回记录集ResultSet B7?784{x,
更新语句,返回数字,表示该更新影响的记录数 V9B $_j4
ResultSet的方法 6l:CDPhR
1、next(),将游标往后移动一行,如果成功返回true;否则返回false \DeZY97p%
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 tnRq?
Z|' tw^0e5
4、释放连接 i+21t G$
cn.close(); Z~T- *1V
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection Qnr' KbK
wz073-v>ZV
可滚动、更新的记录集 FIC
2)
1、创建可滚动、更新的Statement AL
H^tV?
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); WiPMvl8
该Statement取得的ResultSet就是可滚动的 M~ynJ@q
2、创建PreparedStatement时指定参数 An/)|B4
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); ZLE4XB]
ResultSet.absolute(9000); AD*+?%hj
批量更新 ~|l>bf
1、Statement WXO@oZ!
Statement sm = cn.createStatement(); zcIZJVYA
sm.addBatch(sql1); xCoQ>.4p
sm.addBatch(sql2); ]%>;R^HY
... o] )qv~o)
sm.executeBatch() 42Kzdo|}
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 @105 @9F
2、PreparedStatement CIO&VK
PreparedStatement ps = cn.preparedStatement(sql); `lcpUWn
{ NBUM* Z
ps.setXXX(1,xxx); @B+
... t)$>++i
ps.addBatch(); {{@3r5KGl
} |M9x&(H;Hw
ps.executeBatch(); y$4,r4cmR|
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 K
V 4>(
Xps MgJ/w
事务的处理 bG2!5m4L
1、关闭Connection的自动提交 ymr-kB
cn.setAutoCommit(false); G78rpp
2、执行一系列sql语句 ew}C*4qH
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close }1X,~y]
Statement sm ; A
g/z\kX
sm = cn.createStatement(insert into user...); 9FJU'$FN
sm.executeUpdate(); h+N75
sm.close(); $Iqt
c)DA
sm = cn.createStatement("insert into corp...); T][\wyLx1
sm.executeUpdate(); Q\ro )r
sm.close(); ==UH)o`?8
3、提交 2&Wc4,O!i
cn.commit(); qI5/ME(}
4、如果发生异常,那么回滚 /PHktSG
cn.rollback();