java 数据库基本操作 !^,<nP
1、java数据库操作基本流程 ~0^d-,ZD5
2、几个常用的重要技巧: 0fpxr`
可滚动、更新的记录集 {e1akg.
批量更新 JIA'3"C
事务处理 2,3pmb
>@mvb@4*
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 [ITtg?]F
1、取得数据库连接 R)<PCe`vf
1)用DriverManager取数据库连接 +@j@# ~=K
例子 JF+E.-fy$
String className,url,uid,pwd; )[c@5zy~*
className = "oracle.jdbc.driver.OracleDriver"; ^e1Ux
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; w<0F-0:8
uid = "system"; :B(vk3;U!
pwd = "manager"; \'BA}v
&/
Class.forName(className); "SV#e4C.
Connection cn = DriverManager.getConnection(url,uid,pwd); zFq8xw
2)用jndi(java的命名和目录服务)方式 Hl3%+f
例子 B9&$sTAB
String jndi = "jdbc/db"; q0>@!1Wb
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); P>i!f!o*I
DataSource ds = (DataSource) ctx.lookup(jndi); %#zqZ|q
Connection cn = ds.getConnection(); UP})j.z
多用于jsp中 m"r=p
2、执行sql语句 "6<L)
8
1)用Statement来执行sql语句 :O~*}7G
String sql; 3O'6 Ae
Statement sm = cn.createStatement(); )Gu:eYp+`
sm.executeQuery(sql); // 执行数据查询语句(select) N1vPY]8
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); k^Gf2%k
2)用PreparedStatement来执行sql语句 RTJ\|#w
String sql; t.ci!#/d
sql = "insert into user (id,name) values (?,?)"; !=Hu?F p
PreparedStatement ps = cn.prepareStatement(sql); e[:i`J2
ps.setInt(1,xxx); z+k[HE^S
ps.setString(2,xxx); 4fq:W`9sN
... x e!([^l&
ResultSet rs = ps.executeQuery(); // 查询 z"vI-~,YU
int c = ps.executeUpdate(); // 更新 ZSUbPz
W{1"
3、处理执行结果 [T<Z?
查询语句,返回记录集ResultSet UrP jZ:K'
更新语句,返回数字,表示该更新影响的记录数 LO&/U4:
ResultSet的方法 Sp2<rI
1、next(),将游标往后移动一行,如果成功返回true;否则返回false 1c%ee$Q
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 K4{1}bU{>
zIeJ[J@
4、释放连接 j$5S_]2
cn.close(); [\rnJ
lE
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection ]'[(MH"
RXbhuI
可滚动、更新的记录集 Hy9c<X[F9
1、创建可滚动、更新的Statement 4^jIV!V
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); sb3k? q
该Statement取得的ResultSet就是可滚动的 y-/,,,r
2、创建PreparedStatement时指定参数 l0&Y",vy
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); GlPd)m`
ResultSet.absolute(9000); xX5EhVR
批量更新 gI/#7Cr
1、Statement _?YP0GpU
Statement sm = cn.createStatement(); #3h~Z)+y
sm.addBatch(sql1); kW!`vQm~
sm.addBatch(sql2); 3`mM0,fY
... z5|m`$gy
sm.executeBatch() ALOS>Bi&
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 icw (y(W
2、PreparedStatement "~|;XoMU
PreparedStatement ps = cn.preparedStatement(sql); 1>pFUf|cV
{ 43HZ)3!me
ps.setXXX(1,xxx); &l0-0T>
... yG ,oSp|
ps.addBatch(); #j?SdQ
} 0&@pD`K e
ps.executeBatch(); l5*sCp*Z
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 6HK
dBW$/
Uh tk`2O
事务的处理 Jj:Bi&C
1、关闭Connection的自动提交 JR_s-&