java 数据库基本操作
Z
/9>
1、java数据库操作基本流程 PbmDNKEh{
2、几个常用的重要技巧: A -b
[>}_
可滚动、更新的记录集 MgY0q?.S=
批量更新 #*KNPh
事务处理 og
kD^
dUQDOo
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 #Jw1IcuH
1、取得数据库连接 ;LMJd@
1)用DriverManager取数据库连接 #H:7@
例子 43@{JK9G
String className,url,uid,pwd; /\hzb/
className = "oracle.jdbc.driver.OracleDriver"; (Kv#m
3~
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; m8o(J\]
uid = "system"; 7eiV{ tYF
pwd = "manager"; %;rHrDP(>
Class.forName(className); Wh.?j>vB
Connection cn = DriverManager.getConnection(url,uid,pwd); |b)Y#)C;
2)用jndi(java的命名和目录服务)方式 tfGHea)M
例子 xjVS
String jndi = "jdbc/db"; <UQe.K"
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); -&-Ma,M?
DataSource ds = (DataSource) ctx.lookup(jndi); N9v1[~ bv_
Connection cn = ds.getConnection(); c\Q7"!e
多用于jsp中 nuw70*ell
2、执行sql语句 W#hj 1
1)用Statement来执行sql语句 ?]}8o}G
String sql; FN8NTBk
Statement sm = cn.createStatement(); CL+}|7O(
sm.executeQuery(sql); // 执行数据查询语句(select) @]ytla>d
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); =_:et0
2)用PreparedStatement来执行sql语句 =Xqc]5[i
String sql; ;oy-#p>N%
sql = "insert into user (id,name) values (?,?)"; zc;|fHW~O
PreparedStatement ps = cn.prepareStatement(sql); !K'}K>iT
ps.setInt(1,xxx); RH&~+5
ps.setString(2,xxx); U4b0*` o
... (w}H]LQ
ResultSet rs = ps.executeQuery(); // 查询 P7{gfiB
int c = ps.executeUpdate(); // 更新 }#n;C{z2e
orjj'+;X
3、处理执行结果 PEc=\?
查询语句,返回记录集ResultSet ZR(x%ews
更新语句,返回数字,表示该更新影响的记录数 Yj6*NZ*
ResultSet的方法 njWL U!
1、next(),将游标往后移动一行,如果成功返回true;否则返回false 0Nnsjh
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 G1o3l~x
lLF-{
4、释放连接 #g]vc_V
cn.close(); `0Oh_8"
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection "$2y-|
j4^9 7
可滚动、更新的记录集 !;KCU^9
1、创建可滚动、更新的Statement *tK\R&4,4s
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); 5) pj]S!]-
该Statement取得的ResultSet就是可滚动的 Z)SY.iK.
2、创建PreparedStatement时指定参数 s]f6/x/~
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); `1bv@yzq
ResultSet.absolute(9000); !Rhlf.x
批量更新 ,}K7Dg^1
1、Statement >kW@~WDMu
Statement sm = cn.createStatement(); oz}+T(@O
sm.addBatch(sql1); U
G~b a
sm.addBatch(sql2); }<9cL'
... TzNn^ir=HX
sm.executeBatch() w tiny,6
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 i:OK8Q{VI
2、PreparedStatement 6jC`8l:
PreparedStatement ps = cn.preparedStatement(sql); Bg|5KOnd
{ 4X+ifZO
ps.setXXX(1,xxx); Y07ZB'K
... '.81zpff
ps.addBatch(); 5'X ]k@m_
} @T'i/}nl
ps.executeBatch(); kNobl
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。
(q(~de
*%S"eWb
事务的处理 -)RH5WG S
1、关闭Connection的自动提交 i;_t I#:A
cn.setAutoCommit(false); MMx9(`t*.
2、执行一系列sql语句 PqiB\~o@Z
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close T^Ze3L]
Statement sm ; `s8{C
b=}1
sm = cn.createStatement(insert into user...); B4i!/@0s
sm.executeUpdate(); 8[E!E)4M
sm.close(); 3%%o?8ES
sm = cn.createStatement("insert into corp...); =9fajRFTt
sm.executeUpdate(); f
(F)1
sm.close(); ".<DAs j
3、提交 aPm`^
q
cn.commit(); ,v';>.]
4、如果发生异常,那么回滚 ^HqY9QT2
cn.rollback();