java 数据库基本操作 m95]
z18T'
1、java数据库操作基本流程 :jJ0 +Q
2、几个常用的重要技巧: f?TS#jG4}
可滚动、更新的记录集 (
j:eky
批量更新 }}l jVUpC%
事务处理 s^k<r;'\
.LGA0
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 xyHv7u%*
1、取得数据库连接 z'*{V\
1)用DriverManager取数据库连接 (+}44Ldt
例子 PbfgWGr
String className,url,uid,pwd; U?ZWDr"*`w
className = "oracle.jdbc.driver.OracleDriver"; E)|Bl>
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; fOdX2{7m
uid = "system"; 7d/I"?=|rA
pwd = "manager"; BY':R-~(
Class.forName(className); 'wWuR@e#&
Connection cn = DriverManager.getConnection(url,uid,pwd); sq@c?!'
2)用jndi(java的命名和目录服务)方式 8T8]g M
例子 C=bQ2t=Z
String jndi = "jdbc/db"; U;M! jj
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); Gz4LjMQ
&
DataSource ds = (DataSource) ctx.lookup(jndi); 7eW6$$ju,N
Connection cn = ds.getConnection(); C}ASVywc,1
多用于jsp中 Qjd]BX;
2、执行sql语句 x`I"%pG
1)用Statement来执行sql语句 FD[4?\W]#
String sql; 8Un0<+b
Statement sm = cn.createStatement(); -C8LM ls
sm.executeQuery(sql); // 执行数据查询语句(select) ]]y4$[|L
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); t#%J=zF{
2)用PreparedStatement来执行sql语句 `~\8fN
String sql; ZG?e%
sql = "insert into user (id,name) values (?,?)"; !3{.
V\P)
PreparedStatement ps = cn.prepareStatement(sql); d$8K,-M
ps.setInt(1,xxx); u>:j$@56
ps.setString(2,xxx); 7`e<H 8g
... {R/e1-;
ResultSet rs = ps.executeQuery(); // 查询 iBmvy7S?
int c = ps.executeUpdate(); // 更新 8"A0@fNz
+11 oVW
3、处理执行结果 v^;vH$B
查询语句,返回记录集ResultSet ..w$p-1
更新语句,返回数字,表示该更新影响的记录数 "
t?44[
ResultSet的方法 {1+meE
1、next(),将游标往后移动一行,如果成功返回true;否则返回false ":qS9vW
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 }h* j{b,
m-#]v}0A
4、释放连接 #V$sb1u
cn.close(); HZjuL.Tj
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection `R!2N4|;
t^}"8
可滚动、更新的记录集
y|NY,{:]
1、创建可滚动、更新的Statement _Fe=:q
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); Qz"//=hC|H
该Statement取得的ResultSet就是可滚动的 0#ON}l)>
2、创建PreparedStatement时指定参数 1bHQB$%z
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); {:KPEN
ResultSet.absolute(9000); x![G'I
批量更新 mo,"3YW
1、Statement a54S,}|
Statement sm = cn.createStatement(); na
0Zb
sm.addBatch(sql1); mX, @yCI
sm.addBatch(sql2); qQ1D }c@
... R^]a<g,
sm.executeBatch() P@x@5uC2
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 K)}Vr8,V
2、PreparedStatement =h|7bYLy
PreparedStatement ps = cn.preparedStatement(sql); )\kNufP
{ ~#)9Kl7<X
ps.setXXX(1,xxx); %NfH`%`
... 02)Ybp6y
ps.addBatch(); +UX}
"m~W
} i[w&