java 数据库基本操作 ''yB5#^w(
1、java数据库操作基本流程 L
6c 40
2、几个常用的重要技巧: [<n2Uz7MP
可滚动、更新的记录集 gG0!C))8
批量更新 /rWd=~[MO
事务处理 3{'Ne}5%I
5rw 7;'
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 dP3CG8w5
1、取得数据库连接 i3tg6o4C
1)用DriverManager取数据库连接 GeyvId03H
例子 Ag 9vU7
String className,url,uid,pwd; 7j@Hs[
*
className = "oracle.jdbc.driver.OracleDriver"; t|g4m[kr
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; f(/lLgI(
uid = "system"; 6 Q%jA7
pwd = "manager"; 8IlunJ
Class.forName(className); v- 2:(IV
Connection cn = DriverManager.getConnection(url,uid,pwd); `=4r+
2)用jndi(java的命名和目录服务)方式 BmbyH{4
例子 dBYmiF!+
String jndi = "jdbc/db"; wjHzE
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); g%sluT[#
DataSource ds = (DataSource) ctx.lookup(jndi); O#ai)e_uQk
Connection cn = ds.getConnection(); ??^5;P{yx
多用于jsp中 n&$j0k
2、执行sql语句 6HT;#Znn
1)用Statement来执行sql语句 !hJ+Lp_
String sql; 5eLtCsHz
Statement sm = cn.createStatement(); ")SFi^]
sm.executeQuery(sql); // 执行数据查询语句(select) T1 ut"Zu
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); KI)M JG:t
2)用PreparedStatement来执行sql语句 ;O,+2VzP%^
String sql; Fq0i`~L~
sql = "insert into user (id,name) values (?,?)"; dMh:ulIY>
PreparedStatement ps = cn.prepareStatement(sql); 3eb%OEMYk
ps.setInt(1,xxx); 2L3)#22m*
ps.setString(2,xxx); /5S30 |K
... sd*p/Q|4
ResultSet rs = ps.executeQuery(); // 查询 h
k]
N6+@
int c = ps.executeUpdate(); // 更新 9B{k , 1
i+A3~w5c
3、处理执行结果 ~-ia+A6GIV
查询语句,返回记录集ResultSet c23oCfB>
更新语句,返回数字,表示该更新影响的记录数 VLOO8N[o
ResultSet的方法 zwhe
1、next(),将游标往后移动一行,如果成功返回true;否则返回false 2M.fLQ?
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 Kz~ps
5
j]{_s"O
4、释放连接 gH$ Mr
cn.close(); _GV:HOBi
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection n`#tKwWHYx
H=<S 9M
可滚动、更新的记录集 ND'E8Ke pq
1、创建可滚动、更新的Statement BL0 {HV!
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); caIL&G,
该Statement取得的ResultSet就是可滚动的 m4**~xfC
2、创建PreparedStatement时指定参数 bp*
^z,w
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); \d6C%S!
ResultSet.absolute(9000); = I:.X ;
批量更新 [A~y%bI"
1、Statement i`(XLi}k
Statement sm = cn.createStatement(); -)w@f~Q
sm.addBatch(sql1); DVG(Vw
sm.addBatch(sql2); N:S/SZI
... ^NRl//
sm.executeBatch() M\o9I
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 ZT'`hK_up
2、PreparedStatement M||+qd W!
PreparedStatement ps = cn.preparedStatement(sql); )B
T
{ T/b6f;t-s
ps.setXXX(1,xxx); 6"wlg!k8
... y`VyQWW
ps.addBatch(); IoxgjUa
} I5`4Al
ps.executeBatch(); gR&Q3jlIV
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 SzAJ2:qhl
! +a. Ei
事务的处理 PY_u/<u
1、关闭Connection的自动提交 34`'M+3
cn.setAutoCommit(false); N nRD|A
2、执行一系列sql语句 Nkjza:f{
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close *T-<|zQ
Statement sm ; {o)L c6T8s
sm = cn.createStatement(insert into user...); I&2c&yO
sm.executeUpdate(); H['N
sm.close(); Vy6qbC-Kt
sm = cn.createStatement("insert into corp...); wrc,b{{[iM
sm.executeUpdate(); _G[g;$<
sm.close(); i5en*)O8
3、提交 oQLq&zRH`f
cn.commit(); h:W;^\J:-
4、如果发生异常,那么回滚 riUwBiVa?2
cn.rollback();