java 数据库基本操作 Oz9Mqcx
1、java数据库操作基本流程 c[d'1=Qiy
2、几个常用的重要技巧: sWZtbW;)
可滚动、更新的记录集 jO3u]5}.6
批量更新 T>uWf#&pjs
事务处理 l"pz
)$eE
(h@yA8>n
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 >s 8:1l
1、取得数据库连接 j2{,1h j
1)用DriverManager取数据库连接 T.m)c%]^/
例子 I;11j
String className,url,uid,pwd; D -+)M8bt
className = "oracle.jdbc.driver.OracleDriver"; _F/lY\vm
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; kO`3ENN
uid = "system"; k.%W8C<Pa
pwd = "manager"; 1KIq$lG{ E
Class.forName(className); |>o0d~s
Connection cn = DriverManager.getConnection(url,uid,pwd); 6L6~IXL>
2)用jndi(java的命名和目录服务)方式 -JQg ~1
例子 <sWcS; x
String jndi = "jdbc/db"; @tv];t
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); 8hdAXWPn
DataSource ds = (DataSource) ctx.lookup(jndi); {@K2WB
Connection cn = ds.getConnection(); xMfv&q=k@
多用于jsp中 b=QGbFf
2、执行sql语句 6`5
@E\"E
1)用Statement来执行sql语句 #ZnX6=;X
String sql;
xV 1Z&l
Statement sm = cn.createStatement(); 3_eml\CY
sm.executeQuery(sql); // 执行数据查询语句(select) ?o(X0
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); Xx<&6
4W
2)用PreparedStatement来执行sql语句 uA/.4 b
String sql; *ZSp9g"Z
sql = "insert into user (id,name) values (?,?)"; 7%"\DLA
PreparedStatement ps = cn.prepareStatement(sql); uSQ>oi]
ps.setInt(1,xxx); :mtw}H 'F8
ps.setString(2,xxx); w KMk|y>
... y[5P<:&s
ResultSet rs = ps.executeQuery(); // 查询 Ccd7|L1
int c = ps.executeUpdate(); // 更新 F+y`4>x
-x%`Wv@L
3、处理执行结果 }v$=mLy
查询语句,返回记录集ResultSet eN?P) ,
更新语句,返回数字,表示该更新影响的记录数 UE#Ni 5
ResultSet的方法 aaD$'Y,<>B
1、next(),将游标往后移动一行,如果成功返回true;否则返回false JQh s=Xg
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 U!I_i*:U
{LJ6't 8y:
4、释放连接 H{A| ~V)
cn.close(); Ho._&az9cT
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection hy&Hl
z9kX`M+
可滚动、更新的记录集 pA,EUh|H
1、创建可滚动、更新的Statement uj1E*
98m
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); k| cI!
该Statement取得的ResultSet就是可滚动的 2=,Sz1`t
2、创建PreparedStatement时指定参数 yjFQk,A
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
2:5gMt
ResultSet.absolute(9000); \/4%[Q2QDm
批量更新 S{)n0/_
1、Statement >]Yha}6h
Statement sm = cn.createStatement(); A%w]~ chC9
sm.addBatch(sql1); }:D~yEP
sm.addBatch(sql2); Yg,WdVI&@
... 56
kgL;$h
sm.executeBatch() 1o8"==n%
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 <C96]}/ ?
2、PreparedStatement k42ur)pb
PreparedStatement ps = cn.preparedStatement(sql); N[bf.5T
{ ?*mbce[
ps.setXXX(1,xxx); 6.7Kp
... |{LaZXU &
ps.addBatch(); Y&