java 数据库基本操作 I& M36f
1、java数据库操作基本流程 JpxbB)/
2、几个常用的重要技巧: 8@%mnyQ
可滚动、更新的记录集 N=T.l*8
批量更新 hY=w|b=Y
事务处理 x9)aBB
1 O7]3&L@
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 :/v,r=Y9p
1、取得数据库连接 C1T=O
1)用DriverManager取数据库连接 -.{oqs$
例子 wMz-U- z
String className,url,uid,pwd; ?jri!]ux#
className = "oracle.jdbc.driver.OracleDriver"; JYwyR++uo
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; Ts(t:^
uid = "system"; /}w#Jk4pD
pwd = "manager"; 2f|6z-Z
Class.forName(className); 3$c (M99r
Connection cn = DriverManager.getConnection(url,uid,pwd); SLtSqG7~
2)用jndi(java的命名和目录服务)方式 s!#HZK
例子 Re*|$r#
String jndi = "jdbc/db"; `l>93A
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); IX<r5!
DataSource ds = (DataSource) ctx.lookup(jndi); aXdf>2c{JD
Connection cn = ds.getConnection(); IV{FH&t^T"
多用于jsp中 J]}FC{CD!
2、执行sql语句 JBR[;
zM
1)用Statement来执行sql语句 OE'K5oIM
String sql; *O@sh
Statement sm = cn.createStatement(); >[ ug
zJ
sm.executeQuery(sql); // 执行数据查询语句(select) @iU%`=ziz
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); 8F zHNG
2)用PreparedStatement来执行sql语句 {~"7vkc+
String sql; t`"^7YFS>
sql = "insert into user (id,name) values (?,?)"; ~ww?Emrw
PreparedStatement ps = cn.prepareStatement(sql); 6hkkNXqkf
ps.setInt(1,xxx); E'5Ajtw;
ps.setString(2,xxx); Yd'H+r5b
... E:
9o;JU
ResultSet rs = ps.executeQuery(); // 查询 h|bqyu
int c = ps.executeUpdate(); // 更新 R?
O-x9
,e9CJ~a
3、处理执行结果 fNkuX-om
查询语句,返回记录集ResultSet K7IyCcdB
更新语句,返回数字,表示该更新影响的记录数 ngP7'1I
ResultSet的方法 /7bw: h;
1、next(),将游标往后移动一行,如果成功返回true;否则返回false coDjL.u
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 Hu[]h]
xE%O:a?S
4、释放连接 >DL/..
cn.close(); }wG,BB %N
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection Fse['O~
#c-b}.R
可滚动、更新的记录集 #wF1
1、创建可滚动、更新的Statement Qh\YR\O
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); <}d/v_+pnh
该Statement取得的ResultSet就是可滚动的 R1}IeeZO?&
2、创建PreparedStatement时指定参数 ;Xqn-R
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); [*Q-nZ/L
ResultSet.absolute(9000); uJgI<l'|e3
批量更新 [FGgkd}
1、Statement &.zj5*J
Statement sm = cn.createStatement(); 80Ag
sm.addBatch(sql1); MU|{g
5/
)
sm.addBatch(sql2); <"?*zx&