java 数据库基本操作 YP
E1s
1、java数据库操作基本流程 M[ {O%!
2、几个常用的重要技巧: 1WjNF i
可滚动、更新的记录集 SR%k|YT
批量更新 +YZ*>ki
事务处理 I3gl+)Q
Q g~cYwX
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 |RjAp.pm
1、取得数据库连接 nQGl]2
1)用DriverManager取数据库连接 Ft
E5H
例子 Zd5Jz+f
String className,url,uid,pwd; 'tTUro1~
className = "oracle.jdbc.driver.OracleDriver"; ~c,CngeL0
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; nuKcq!L
uid = "system"; "@z X{^:
pwd = "manager"; Emy=q5ryl
Class.forName(className); Q
XSS
Connection cn = DriverManager.getConnection(url,uid,pwd); |I[/Fl:
2)用jndi(java的命名和目录服务)方式 a\m_Q{:
例子 n6AA%? 5
String jndi = "jdbc/db"; g(_xo\
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); "QD>m7
DataSource ds = (DataSource) ctx.lookup(jndi); "I3
#/~q
Connection cn = ds.getConnection(); 8Y4mTW
多用于jsp中 vA3wn><
2、执行sql语句 dx@|M{jz'
1)用Statement来执行sql语句 Mj&G5R~_
String sql; s$% t2UaV
Statement sm = cn.createStatement(); Hr_5N,
sm.executeQuery(sql); // 执行数据查询语句(select) {V,aCr
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); {Qi J-[q
2)用PreparedStatement来执行sql语句 :)Pj()Os|
String sql; N0DzFXp
sql = "insert into user (id,name) values (?,?)"; :KmnwYm
PreparedStatement ps = cn.prepareStatement(sql); &(7=NAQsE
ps.setInt(1,xxx); dI%?uk
ps.setString(2,xxx); 6k_Uq.<X
... i0:1+^3^U
ResultSet rs = ps.executeQuery(); // 查询 7s0\`eXo/
int c = ps.executeUpdate(); // 更新 =cpUc]~
},n?
3、处理执行结果 Xh}S_/9}5
查询语句,返回记录集ResultSet lZAXDxhnT
更新语句,返回数字,表示该更新影响的记录数 =oBlUE
ResultSet的方法 rD+mI/_J`
1、next(),将游标往后移动一行,如果成功返回true;否则返回false VV;%q3}:
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 _ amP:h
{J1iheuS}
4、释放连接 =t^jlb
cn.close(); O1D|T"@
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection rFUR9O.{E
G9^xv
可滚动、更新的记录集 vgE
-t
1、创建可滚动、更新的Statement )I#{\^
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); mC0_rN^Aj
该Statement取得的ResultSet就是可滚动的 - "NK"nb
2、创建PreparedStatement时指定参数 #c!rx%8I
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); Lqdapx"Z_
ResultSet.absolute(9000); }DQTy.d;P
批量更新 ^@3,/dH1 t
1、Statement 5(gWK{R)*
Statement sm = cn.createStatement(); EugRC
sm.addBatch(sql1); tr5j<O
sm.addBatch(sql2); SRtw
... Jz}`-fU`
sm.executeBatch() @@j:z;^|
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 "OwK-
2、PreparedStatement ]5K+W
PreparedStatement ps = cn.preparedStatement(sql); /GVjesN
{ cZJ5L>ox
ps.setXXX(1,xxx); LSo*JO6
... tLi91)oG
ps.addBatch(); g<@Q)p*ow
} ),CKuq>
ps.executeBatch(); ? cXW\A(
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 /IN#1I!K
5 w(nttYH
事务的处理 HKr}"`I.
1、关闭Connection的自动提交 43x2BW&&
cn.setAutoCommit(false); Lb)rloca
2、执行一系列sql语句 6DU~6c=)
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close _p>F43%p
Statement sm ; ,-hbwd~M
sm = cn.createStatement(insert into user...); (H5#r2h%Y
sm.executeUpdate(); ,{mv6?_
sm.close(); m}u)C&2>
sm = cn.createStatement("insert into corp...); q}+zNeC
sm.executeUpdate(); _1Q6FI5iR
sm.close(); IMr#5
3、提交 XmD(&3;v-
cn.commit(); ?2l`%l5(
4、如果发生异常,那么回滚 Pz34a@%"
cn.rollback();