java 数据库基本操作 a6=mE?JTB
1、java数据库操作基本流程 j eF1{ %
2、几个常用的重要技巧: <y5V],-U
可滚动、更新的记录集 X.<_TBos|
批量更新 ?6.vd]oNO
事务处理 9i@AOU
-e7|DXj
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 Knsb`1"E^6
1、取得数据库连接 ^c{}G<U^
1)用DriverManager取数据库连接 O-B~~$g
例子 O @fX
+W?U
String className,url,uid,pwd; _l]`Og@Y
className = "oracle.jdbc.driver.OracleDriver"; rZ<0ks
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; )BNm~sP
uid = "system"; Q(h,P+
pwd = "manager"; p'1n'|$e
Class.forName(className); E 5}T_~-{
Connection cn = DriverManager.getConnection(url,uid,pwd); )3v0ex@Jl
2)用jndi(java的命名和目录服务)方式 *0M#{HQ
例子 8[5%l7's
String jndi = "jdbc/db"; D.xN_NK"
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); _ b}\h,Ky
DataSource ds = (DataSource) ctx.lookup(jndi); hH:7
Connection cn = ds.getConnection(); Nw $io8:d
多用于jsp中 Ls#pe
2、执行sql语句 i.2O~30ST
1)用Statement来执行sql语句 \V`O-wcJ]S
String sql; @OAX#iQl
Statement sm = cn.createStatement(); )%%RI_JT
sm.executeQuery(sql); // 执行数据查询语句(select) pHFlO!#]|
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); *)"U5A/v)
2)用PreparedStatement来执行sql语句 w~M5)b
String sql; KTxdZt
sql = "insert into user (id,name) values (?,?)"; 5}
|O
PreparedStatement ps = cn.prepareStatement(sql); , M$*c
ps.setInt(1,xxx); SPW @TF1
ps.setString(2,xxx); >|SB]'C|
... 2#&9qGR
ResultSet rs = ps.executeQuery(); // 查询 )a,-Hc:Vz
int c = ps.executeUpdate(); // 更新 jzV*V<
>U~.I2sz
3、处理执行结果 |o~<Ti6]
查询语句,返回记录集ResultSet "T5?<c
更新语句,返回数字,表示该更新影响的记录数 :/ns/~5xa:
ResultSet的方法 {OP-9P=p
1、next(),将游标往后移动一行,如果成功返回true;否则返回false r:K)Q@
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 vgOmcf%;
%Bmi3
=Rr
4、释放连接 )xCpQ=nS
cn.close(); ]3hz{zqV^
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection
U,)Ngnd
_v4TyJ
可滚动、更新的记录集 D.)$\Caq
1、创建可滚动、更新的Statement k6rX/ocu
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); mH*42XC*
该Statement取得的ResultSet就是可滚动的 b,5H|$nLu
2、创建PreparedStatement时指定参数 #{7=
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); q]:+0~cz
ResultSet.absolute(9000); n"Ec %n
批量更新 pr>Qu:
1、Statement [,Ts;Hy6Q
Statement sm = cn.createStatement(); <