java 数据库基本操作 m
al?3*x/
1、java数据库操作基本流程 9vP#/ -g
2、几个常用的重要技巧: pr[V*C/
可滚动、更新的记录集 JM7FVB
批量更新 {DD #&B
事务处理 "%YVAaN
kX2Z@
w`
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 yAFt|<
1、取得数据库连接 +G6 Ge;
1)用DriverManager取数据库连接 0a2#36;_IK
例子 j 8)*'T
String className,url,uid,pwd; dZY|6
className = "oracle.jdbc.driver.OracleDriver"; rJ{k1H >
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; Z,DSTP\|
uid = "system"; 8!{
}WLwb
pwd = "manager"; u+O"c
Class.forName(className); KF6N P
Connection cn = DriverManager.getConnection(url,uid,pwd); ]9-iEQ
2)用jndi(java的命名和目录服务)方式 Rk-G|52g
例子 zE Ly1v\"
String jndi = "jdbc/db"; EbeSl+iMx_
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); DX^8w?t
DataSource ds = (DataSource) ctx.lookup(jndi); Xf[;^?]X
Connection cn = ds.getConnection(); f_Hh"Vh
多用于jsp中 :Q,~Nw>
2、执行sql语句 @?jbah#
1)用Statement来执行sql语句 ;Y,zlq2
String sql; e8E' X
Statement sm = cn.createStatement(); XmaRg{22
sm.executeQuery(sql); // 执行数据查询语句(select) icQQLSU5
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); ($Op*bR
2)用PreparedStatement来执行sql语句 $DaQM'-
String sql; :r2d%:h%2
sql = "insert into user (id,name) values (?,?)"; }KYOde@
PreparedStatement ps = cn.prepareStatement(sql); $o.;}
ps.setInt(1,xxx); k8!:`jG
ps.setString(2,xxx); ILx4[m7
... dV{mmHL
ResultSet rs = ps.executeQuery(); // 查询 LM(r3sonb
int c = ps.executeUpdate(); // 更新 *+k
yuY J
oWx^_wQ-=
3、处理执行结果 P'o]#Az
查询语句,返回记录集ResultSet 9f/l"
更新语句,返回数字,表示该更新影响的记录数 Qp7F3,/#
ResultSet的方法 III:jhh
1、next(),将游标往后移动一行,如果成功返回true;否则返回false Yhz Dw8f
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 F-F1^$]k
xSm~V3bc
4、释放连接 ?LJiFG]^m
cn.close(); 7[mP@ {
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection &'`ki0Xh;
*8+HQ[[#
可滚动、更新的记录集
.<E7Ey#
1、创建可滚动、更新的Statement K%_UNivN
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); Ly/
该Statement取得的ResultSet就是可滚动的 $=X>5B
2、创建PreparedStatement时指定参数 *&I
_fAh]
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); "Ec9.#U/
ResultSet.absolute(9000); ?p/}eRgi
批量更新 ao0^;
1、Statement 4e?bkC
Statement sm = cn.createStatement(); S&.xgBR
sm.addBatch(sql1); W]Nc6B*gI
sm.addBatch(sql2); Z4:^#98c.
... 7=NKbv]
sm.executeBatch() )#GF:.B
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 x3(
->?)D
2、PreparedStatement <$pv;]n
PreparedStatement ps = cn.preparedStatement(sql); cL!A,+S[_
{ u\MxQIo'u
ps.setXXX(1,xxx); '@
p464
... :xTm-L
ps.addBatch(); O,-NzGs
} )#1!%aQ
ps.executeBatch(); 2#00<t\
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 4"3.7.<Q`
}D?qj3?bj
事务的处理 SSbx[<E3
1、关闭Connection的自动提交 ^7*7^<
cn.setAutoCommit(false); MslgQmlM
2、执行一系列sql语句 Q, "8Ty
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close pr1bsrMuL
Statement sm ; )pe17T1|
sm = cn.createStatement(insert into user...); LE)$_i8gX
sm.executeUpdate(); @Kn@j D;
sm.close(); y Tn<5T[H
sm = cn.createStatement("insert into corp...); ^16zZ*
sm.executeUpdate(); R# .H&#
sm.close(); e2K9CE.O
3、提交 &c