java 数据库基本操作 cp2e,%o
1、java数据库操作基本流程 G;FY2;adK
2、几个常用的重要技巧: bxO8q57
可滚动、更新的记录集 2<yE3:VX
批量更新 C]-Z+9Vvv
事务处理 OUe@U;l{Z
Rw*l#cr=.
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 ^l
~i >:V
1、取得数据库连接 H__9%p#
1)用DriverManager取数据库连接 ~d7!)c`z
例子 M=e]v9
String className,url,uid,pwd; w:&m_z#M
className = "oracle.jdbc.driver.OracleDriver"; |qJQWmJO&U
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; X#-U
uid = "system"; Ym-uElWo
pwd = "manager"; <r,l
Class.forName(className); 4W~pAruwr
Connection cn = DriverManager.getConnection(url,uid,pwd); 9rtcI[&?0
2)用jndi(java的命名和目录服务)方式 $ W(m
例子 gec<5Ewg
String jndi = "jdbc/db"; zMKW@
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); 29pIO]8;
DataSource ds = (DataSource) ctx.lookup(jndi); +BM (0M+
Connection cn = ds.getConnection(); h{yqNl
多用于jsp中 goeWZ O
2、执行sql语句 t&wtw
1)用Statement来执行sql语句 3*3WO,9
String sql; Nj qUUkc
Statement sm = cn.createStatement(); y:D|U!o2V
sm.executeQuery(sql); // 执行数据查询语句(select) *8fnxWR
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); @P4fR7
2)用PreparedStatement来执行sql语句 LqPn$rZ|$
String sql; zhU)bb[A
sql = "insert into user (id,name) values (?,?)"; "MKgU[t
PreparedStatement ps = cn.prepareStatement(sql); "o`N6@[w^
ps.setInt(1,xxx); 8,#v7ns}#
ps.setString(2,xxx); ;_,=
... g` 6Xrf
ResultSet rs = ps.executeQuery(); // 查询 _NA0$bGN9
int c = ps.executeUpdate(); // 更新 GrW+P[j9
.#6Dad=S*
3、处理执行结果 <u*~RYA2
查询语句,返回记录集ResultSet
s6rdQI]
更新语句,返回数字,表示该更新影响的记录数 M/ 0!B_(R
ResultSet的方法 P8Fq %k
1、next(),将游标往后移动一行,如果成功返回true;否则返回false EMmNlj6
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 y1(smZU
o';sHa'
4、释放连接 t%n1TY,
cn.close(); UBrYN'QRNt
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection Ja|! fT
,-&ler~[
可滚动、更新的记录集 VieC+Kk
1、创建可滚动、更新的Statement $[6:KV
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); _LFZ 0
该Statement取得的ResultSet就是可滚动的 !!b5vzyve
2、创建PreparedStatement时指定参数 Ni'vz7j
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); #q%xJ[
ResultSet.absolute(9000); lKrD.iYt8
批量更新 OOGqtA;
1、Statement s 9PD[u/y
Statement sm = cn.createStatement(); amK?LDf]
sm.addBatch(sql1); Ajr]&H4
sm.addBatch(sql2); ce/Rzid
... bPAp0}{Fu
sm.executeBatch() :O{`!&[>L
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 *{P"u(K
2、PreparedStatement ,o]"G[Jk
PreparedStatement ps = cn.preparedStatement(sql); v-3In\T=^
{ >o>r@;
ps.setXXX(1,xxx); 4WG~7eIgy
... !uii|"
ps.addBatch(); @3K)VjY7
} 5u
MP31
ps.executeBatch(); 4$+1jjC]>~
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 8=FP92X
KTD# a1W
事务的处理 -]~&Pi