java 数据库基本操作 izXbp02
1、java数据库操作基本流程 rH[5~U
2、几个常用的重要技巧: dz{#"No0
可滚动、更新的记录集 @P*ylB}?Q
批量更新 ~o:rM/!Ba
事务处理 =s`XZkh
,?C|.5
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 &/ \O2Aw8
1、取得数据库连接 h1n*WQ-
1)用DriverManager取数据库连接 &\JK%X.Jlt
例子 /TzNdIv
String className,url,uid,pwd; %=laY_y
G
className = "oracle.jdbc.driver.OracleDriver"; lq;
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; ,.~
W
uid = "system"; C/SapX
pwd = "manager"; np<f,
Class.forName(className); es.jh
Connection cn = DriverManager.getConnection(url,uid,pwd); E~'q?LJOB
2)用jndi(java的命名和目录服务)方式 1,m\Q_
例子 ) ~ l\
String jndi = "jdbc/db"; VI(RT-S6
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); i6-wf Gs;
DataSource ds = (DataSource) ctx.lookup(jndi); Mr$# e
Connection cn = ds.getConnection(); aeEw#
多用于jsp中 3Cq6h;!#
2、执行sql语句 ^RY n8I
1)用Statement来执行sql语句 lF0K=L
String sql; d\v$%0
Statement sm = cn.createStatement(); elN{7:
sm.executeQuery(sql); // 执行数据查询语句(select) <FCj)CP%
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); suA+8}o]
2)用PreparedStatement来执行sql语句 :({-0&&_
String sql; }rO?5
sql = "insert into user (id,name) values (?,?)"; r~8D\_=s
PreparedStatement ps = cn.prepareStatement(sql); q>Q:X3
ps.setInt(1,xxx); jjJc1 p0
ps.setString(2,xxx); $KoPGgC[
... lc\>DH\n6
ResultSet rs = ps.executeQuery(); // 查询 |^YzFrc
int c = ps.executeUpdate(); // 更新 C!oS=qK?]
.}IK}A/-
3、处理执行结果 >+yqjXRzm
查询语句,返回记录集ResultSet \pjRv
更新语句,返回数字,表示该更新影响的记录数 Fg_?!zR>6
ResultSet的方法 9V|E1-")E
1、next(),将游标往后移动一行,如果成功返回true;否则返回false 1~["{u
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 |
\ s2
L~@ma(TV{K
4、释放连接 clh3
cn.close(); E"Ya-8d=
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection kWzuz#
+AE&GU
可滚动、更新的记录集 )2iM<-uB
1、创建可滚动、更新的Statement A8=e?%
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); k! J4Z${k
该Statement取得的ResultSet就是可滚动的 eXj\DjttG}
2、创建PreparedStatement时指定参数 \(.nPW]9
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); 0_YxZS\
ResultSet.absolute(9000); BP )q6?Mz
批量更新 B'WCN&N
1、Statement @5{.K/s
Statement sm = cn.createStatement(); b:N^Fe
sm.addBatch(sql1); Ha46U6_'h
sm.addBatch(sql2); +)/Rql(lY
... 08TaFzP81
sm.executeBatch() !!?+M @
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 A[sM{i~Z
2、PreparedStatement
`_NnQ%
PreparedStatement ps = cn.preparedStatement(sql); [VY8?y
{ &