java 数据库基本操作 0?WcoPU
1、java数据库操作基本流程 ^$%Z!uz
2、几个常用的重要技巧: /ug8]Lo0
可滚动、更新的记录集 c`x7u}C
批量更新 ?j^=u:<
事务处理 \,!QJp4
\.XLcz
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 2cu#lMq
1、取得数据库连接 HE<1v@jW
1)用DriverManager取数据库连接 ,:+dg(\r
例子 Ld^GV
String className,url,uid,pwd; R{,ooxH\J
className = "oracle.jdbc.driver.OracleDriver"; tweY'x.{
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; .kTG[)F0b
uid = "system"; 1>Q{Gs^
pwd = "manager"; b]E|*
Class.forName(className); ?)'~~@NkH
Connection cn = DriverManager.getConnection(url,uid,pwd); 39{{7(hh
2)用jndi(java的命名和目录服务)方式 B7\k< Nit0
例子 OdMO=Hy6d
String jndi = "jdbc/db"; ?Z\Yu'
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); (><zsLs&
DataSource ds = (DataSource) ctx.lookup(jndi); PiFD^w
Connection cn = ds.getConnection(); b'zR 9V
多用于jsp中 BF{w)=@/'
2、执行sql语句 5q@LxDy,b
1)用Statement来执行sql语句 dk8wIa"K`
String sql; `ovtHl3Q
Statement sm = cn.createStatement(); [nxE)D
sm.executeQuery(sql); // 执行数据查询语句(select) X &2oPo
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); hP J4Oj1O
2)用PreparedStatement来执行sql语句 X\p,%hk \
String sql; \b}~2oX
sql = "insert into user (id,name) values (?,?)"; MH|]\
PreparedStatement ps = cn.prepareStatement(sql); #6Xs.*b5C
ps.setInt(1,xxx); P7B:%HiAx
ps.setString(2,xxx); Qy#)Gxp
... wV?,Z!\Z
ResultSet rs = ps.executeQuery(); // 查询 3M5#4n\v$
int c = ps.executeUpdate(); // 更新 }U@m*dEG
UDf9FnG}L
3、处理执行结果 `SO|zz|'
查询语句,返回记录集ResultSet 8#R?]Uwq
更新语句,返回数字,表示该更新影响的记录数 f[gqT
yiP
ResultSet的方法 \Mv":Lm1
1、next(),将游标往后移动一行,如果成功返回true;否则返回false dQezd-y*
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 Y}6n]n;uR
}awzO#
4、释放连接 ?_\$
cn.close(); (3\Xy
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection r!}al5~&
Dc~,D1xWj
可滚动、更新的记录集 66snC{gU
1、创建可滚动、更新的Statement \EoX8b}$b0
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); [fu!AIQs
该Statement取得的ResultSet就是可滚动的 3#wcKv%>&_
2、创建PreparedStatement时指定参数 5CAR{|a
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); gPS&^EdxA
ResultSet.absolute(9000); M8w5Ob
批量更新 }4co)B"
1、Statement 4([.xT
Statement sm = cn.createStatement(); HEK-L)S.
*
sm.addBatch(sql1); l? #xAZx&_
sm.addBatch(sql2); a)*6gf<