java 数据库基本操作 1XC*|
1、java数据库操作基本流程 2M5*bNU_:
2、几个常用的重要技巧: o7hH9iY
可滚动、更新的记录集 u>j 5`OXo
批量更新 qb
46EZu
事务处理 .) ?2)Fl
=ulr_i%Xs
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 T;xHIg4
1、取得数据库连接 f45;fT>
1)用DriverManager取数据库连接 &8o :
例子 @5JLjCN
String className,url,uid,pwd; c4S>_qH
className = "oracle.jdbc.driver.OracleDriver"; o
x03c
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; -(|7`U
uid = "system"; {EZFx,@t
pwd = "manager"; {A!;W
Class.forName(className); CAA tco5
Connection cn = DriverManager.getConnection(url,uid,pwd); 6eW1<p
2)用jndi(java的命名和目录服务)方式 7Q<Kha
例子 {.0X[uAf
String jndi = "jdbc/db"; pXGK:ceFu
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); `S uS)RhA)
DataSource ds = (DataSource) ctx.lookup(jndi); e@6RC bj
Connection cn = ds.getConnection(); 8b8e^\l(
多用于jsp中 {-:4O\/
2、执行sql语句 w i![0IE )
1)用Statement来执行sql语句 ~Tpe,juG_
String sql; 9;r48)5
Statement sm = cn.createStatement(); u)N2
sm.executeQuery(sql); // 执行数据查询语句(select) ;Hz`0V
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); sj?`7kg
2)用PreparedStatement来执行sql语句 A8CIP:Z
String sql; V!j K3vc
sql = "insert into user (id,name) values (?,?)"; "P>$=X~Zi
PreparedStatement ps = cn.prepareStatement(sql); ym-lT|>Z
ps.setInt(1,xxx); YqK+F=0
ps.setString(2,xxx); -P IA;#Gs
... 60.[t9pk6
ResultSet rs = ps.executeQuery(); // 查询 .Bm ^3A
int c = ps.executeUpdate(); // 更新 @+QYWh'
9y
d-&yDG
3、处理执行结果
<Hq6]\<
查询语句,返回记录集ResultSet .If"'hMY
更新语句,返回数字,表示该更新影响的记录数 )Gu0i7iN
ResultSet的方法 F}VS)
1、next(),将游标往后移动一行,如果成功返回true;否则返回false dM>j<JC=
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 *FI5z[8,
/ynKKJx<Y
4、释放连接 >llwNT
cn.close(); &Sa_%:*D(
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection \.XT:B_
"W3n
BaG
可滚动、更新的记录集 '=Ip5A{S /
1、创建可滚动、更新的Statement v '"1/% L
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); rH
[+/&w5
该Statement取得的ResultSet就是可滚动的 E.WNykF-
2、创建PreparedStatement时指定参数 9Y!0>&o
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); DkF@XK0c3
ResultSet.absolute(9000); Wme1Uid
批量更新 )U"D4j*p
1、Statement {d*qlztO
Statement sm = cn.createStatement(); ~(*co[_
sm.addBatch(sql1); 6qmo
ZAg
sm.addBatch(sql2); E#&c]9QM75
... 0k .#
sm.executeBatch() 7>c 0V&
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 tq4"QBIKh
2、PreparedStatement w<8O=
PreparedStatement ps = cn.preparedStatement(sql); h>mBkJ
{
{ 7><*
9iOW
ps.setXXX(1,xxx); R?={{+O
... 5KA
FUR0
ps.addBatch(); =F!",a~
} :"y7Weh
ps.executeBatch();
8E.5k@
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 h!X'SGK
->RF`SQu
事务的处理 (<g;-pZH%
1、关闭Connection的自动提交 Np5/lPb1
cn.setAutoCommit(false); =%#$HQ=
2、执行一系列sql语句 b>>=d)R
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close A{u\8-u
Statement sm ; ?*MV
^IY
sm = cn.createStatement(insert into user...); C4X{Ps\
sm.executeUpdate(); }.Na{]<gh
sm.close(); ]w&?k:y>
sm = cn.createStatement("insert into corp...); tSh}0N)
sm.executeUpdate(); fs)q7 7g
sm.close(); G74a9li@
3、提交 ]'bQ(<^#
cn.commit(); nfCd*f
4、如果发生异常,那么回滚 ,sRrV $,"
cn.rollback();