java 数据库基本操作 ;RJ
8h
x
1、java数据库操作基本流程 >xabn*Kq
2、几个常用的重要技巧: {@vnKyf^K
可滚动、更新的记录集 ,bXZ<RY$
批量更新 B Z|A&;
事务处理 1Vdi5;dn
F'b%D
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 ,#UZp\zZ*
1、取得数据库连接 Jr( =Y@Z'
1)用DriverManager取数据库连接 4[@YF@_=M
例子 t|eH'"N%o
String className,url,uid,pwd; EC;>-s
className = "oracle.jdbc.driver.OracleDriver"; Cp(2]Eb
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; Nw'03Jzx_
uid = "system"; '"fJA/O
pwd = "manager"; q6)fP4MQ]
Class.forName(className); kFwFPK%B
Connection cn = DriverManager.getConnection(url,uid,pwd);
_%-
+"3Ll
2)用jndi(java的命名和目录服务)方式 !CWe1Dm
例子 xy[#LX)RW
String jndi = "jdbc/db"; 29,ET}~
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); IGcq*mR=
DataSource ds = (DataSource) ctx.lookup(jndi); s@ r{TXEn
Connection cn = ds.getConnection(); #M16qOEw
多用于jsp中 X8Q'*
2、执行sql语句 LXK!4(xa W
1)用Statement来执行sql语句 WN+i 3hC
String sql; !Fp %2gt|
Statement sm = cn.createStatement(); /T)E&=Ds
sm.executeQuery(sql); // 执行数据查询语句(select) /7 Tm2Vj8
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); PQkw)D<n]_
2)用PreparedStatement来执行sql语句 ve
ysW(z
String sql; \jtA8o%n
sql = "insert into user (id,name) values (?,?)"; Os@b8V 8,A
PreparedStatement ps = cn.prepareStatement(sql); Fs( PVN
ps.setInt(1,xxx); Z-Qp9G'
ps.setString(2,xxx);
2Qp}f^
... ![\-J$
ResultSet rs = ps.executeQuery(); // 查询 ={)85N
int c = ps.executeUpdate(); // 更新 ^obuMQ;
9p qsr~
3、处理执行结果 V_gl#e#
查询语句,返回记录集ResultSet b<00 %Z
更新语句,返回数字,表示该更新影响的记录数 Bzrnmz5S
ResultSet的方法 :J`@@H
1、next(),将游标往后移动一行,如果成功返回true;否则返回false Wr%ov6:
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 f\<r1
I_<XL<
4、释放连接 x 3=1/#9
cn.close(); ki9&AFs2X
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection 0I)$!1~O)
/RxP:>hVv
可滚动、更新的记录集 G kjfDY:
1、创建可滚动、更新的Statement 172 G
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); eo0-aHs
该Statement取得的ResultSet就是可滚动的 _-TplGSO=c
2、创建PreparedStatement时指定参数 X ha9x,
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); I "AjYv4R
ResultSet.absolute(9000); D=-}&w_T"
批量更新 v.Ba
1、Statement jW\:+Taq
Statement sm = cn.createStatement(); ;7lON-@BI
sm.addBatch(sql1); [yXmnrxA
sm.addBatch(sql2); ^-_*@e*JE
... TVD~Ix
sm.executeBatch() sllT1%?
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 'w+]kt-
2、PreparedStatement 'dwT&v]@
PreparedStatement ps = cn.preparedStatement(sql); }tW-l*\U
{ %+(AKZu:
ps.setXXX(1,xxx); B$_4ul\)
... ,x8;| o5
ps.addBatch(); G%erh}0~
} ep"[;$Eb
ps.executeBatch(); ( 2HM"Pd
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 4k;FZo]S
35& ^spb
事务的处理 a{]=BY oL
1、关闭Connection的自动提交 b_31 \
cn.setAutoCommit(false); vFVUdxPOw
2、执行一系列sql语句 zFq%[ X
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close VI2lwE3
Statement sm ; fHup&|.
sm = cn.createStatement(insert into user...); 4!/JN J
sm.executeUpdate(); /|
v.A\:
sm.close(); <