java 数据库基本操作 0OPpA Ll
1、java数据库操作基本流程 "%fvA;
2、几个常用的重要技巧: k5TPzm=y{
可滚动、更新的记录集 X7{ h/^
批量更新 X)k+BJ
事务处理 zx=AT
M`gr*p
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 5Q.z#]Lg
1、取得数据库连接 ,`;Dre
1)用DriverManager取数据库连接 O*y@4AR"S
例子 dRPX`%J
String className,url,uid,pwd; &~a/Upz0]_
className = "oracle.jdbc.driver.OracleDriver"; 6/&aBE=
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; `6`oLu\l
uid = "system"; >2@ a\
pwd = "manager"; e+7x &-+
Class.forName(className); X/-u$c
Connection cn = DriverManager.getConnection(url,uid,pwd); o7WK"E!pF'
2)用jndi(java的命名和目录服务)方式 k=r)kkO)
例子 Fmux#}Z
String jndi = "jdbc/db"; m-)yQM8
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); *w_f-YoXp
DataSource ds = (DataSource) ctx.lookup(jndi); O a#m}b
Connection cn = ds.getConnection(); Mg}8 3kS
多用于jsp中 Nw|m"VLb
2、执行sql语句 4>$weu^
1)用Statement来执行sql语句 M}*#{UV2
String sql; SM@RELA'Lb
Statement sm = cn.createStatement(); L!V6Rfy
sm.executeQuery(sql); // 执行数据查询语句(select) `1qM Sq
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); -|&5aH]
2)用PreparedStatement来执行sql语句 M~#%
[?iU
String sql; 7n*[r*$
sql = "insert into user (id,name) values (?,?)"; of>"qrdZ
PreparedStatement ps = cn.prepareStatement(sql); RmcQGQ
ps.setInt(1,xxx); ';OZP2
ps.setString(2,xxx); a>/cVu'kz
... GUqhm$6a
ResultSet rs = ps.executeQuery(); // 查询
wk (}q
int c = ps.executeUpdate(); // 更新 a0=5G>G9c
5Sfz0
3、处理执行结果 _;yi/)-2
查询语句,返回记录集ResultSet cp\A
xWtUZ
更新语句,返回数字,表示该更新影响的记录数
|jwN8@
ResultSet的方法 H&3i[D!p
1、next(),将游标往后移动一行,如果成功返回true;否则返回false {9yW8&m
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 Z2wgfP`
A-XWG9nL
4、释放连接 t:<dirw,o
cn.close(); f*Dy>sw
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection |)\{Rufb
4_B1qN
可滚动、更新的记录集 BO3%p
1、创建可滚动、更新的Statement Lavm
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); Q'n]+%YN
该Statement取得的ResultSet就是可滚动的 !mtq?LV
2、创建PreparedStatement时指定参数 XexslzI
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); PK7
kpC
ResultSet.absolute(9000); %.3]F2_Q
批量更新 IoI
,IX]i)
1、Statement jQLiqi`
Statement sm = cn.createStatement(); %.+#e
sm.addBatch(sql1); "Ooc;xD3<
sm.addBatch(sql2); (aa}0r5
... AyUiX2=w1
sm.executeBatch() g0
NSy3t
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 [#hoW"'Q9
2、PreparedStatement _Bhm\|t
PreparedStatement ps = cn.preparedStatement(sql); qe\JO'g#e
{ {f
kP|d
ps.setXXX(1,xxx); @p}"B9h*^
... y8QJ=v* B
ps.addBatch(); n'-?CMH`
} =TzmhX5
ps.executeBatch(); uh_2yw_
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 X_nxC6[m%
Y']D_\y
事务的处理 =
rLL5<
1、关闭Connection的自动提交 6rD
Oa~<