java 数据库基本操作 [,fd Nxc8
1、java数据库操作基本流程 .8%mi'0ud
2、几个常用的重要技巧: J]|lCwF
可滚动、更新的记录集 NTtRz(
批量更新 :+>:>$ao
事务处理
S*1Km&
NCM&6<_
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 :Gz# 4k
1、取得数据库连接 zl!`*{T{
1)用DriverManager取数据库连接 U'acVcD
例子 1$Pn;jg:
String className,url,uid,pwd;
h8!;RN[
className = "oracle.jdbc.driver.OracleDriver"; KGm"-W
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; W<D(M.61A
uid = "system"; yxa~Rz/
pwd = "manager"; {E~MqrX
Class.forName(className); pQY.MZSA
Connection cn = DriverManager.getConnection(url,uid,pwd); }3Y3f).ZW
2)用jndi(java的命名和目录服务)方式 ?=uw0~O[
例子 b]h]h1~hHH
String jndi = "jdbc/db"; o[!g,Gmoh
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); 4;ig5'U,
DataSource ds = (DataSource) ctx.lookup(jndi); zSiSZMP"
Connection cn = ds.getConnection(); Y Hv85y
多用于jsp中 q(yw,]h]{
2、执行sql语句 X;ZR"YgT
1)用Statement来执行sql语句 L.xzI-I@D
String sql; SAEr $F^
Statement sm = cn.createStatement(); &n:F])`2
sm.executeQuery(sql); // 执行数据查询语句(select) SdfrLdi}Y
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); ]{[VTjC7rY
2)用PreparedStatement来执行sql语句 GBZx@B[TY
String sql; 5)yQrS !{:
sql = "insert into user (id,name) values (?,?)"; t'EH_U
PreparedStatement ps = cn.prepareStatement(sql); &:` 7
ps.setInt(1,xxx); [lC*|4t&
ps.setString(2,xxx); "=W7=V8w
... 9J?G"JV?
ResultSet rs = ps.executeQuery(); // 查询 RkJ\?
int c = ps.executeUpdate(); // 更新 sS $- PX
C
{ [4Y(l1
3、处理执行结果 o"x&F
查询语句,返回记录集ResultSet [D H@>:"dd
更新语句,返回数字,表示该更新影响的记录数 {O,Cc$_
ResultSet的方法 ]AGJPuX
1、next(),将游标往后移动一行,如果成功返回true;否则返回false N+?kFob
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 N3nk\)V\E
R?Q@)POW
4、释放连接 WQ]~TGW
cn.close(); 9k^;]jE
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection K`@GNT&
eb)S<%R/
可滚动、更新的记录集 QH%{r4
1、创建可滚动、更新的Statement OwQ 9y<v
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); 3
SQ_9{
该Statement取得的ResultSet就是可滚动的 OX?9 3AlG
2、创建PreparedStatement时指定参数 >29eu^~nh
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); Z<|caT]Q(
ResultSet.absolute(9000); P$)9osr
批量更新 x
c-=;|s
1、Statement 56o?=|
Statement sm = cn.createStatement(); dxkXt k
sm.addBatch(sql1); @Ey(0BxNu
sm.addBatch(sql2); g2hxWf"
... (*%+!PS
sm.executeBatch() u+zq:2)H6
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 HPT9B?^
2、PreparedStatement }b
YiyG\
PreparedStatement ps = cn.preparedStatement(sql); zk4yh%Cd_
{ HFx8v!^5N
ps.setXXX(1,xxx); '8>#`Yba
... T"Wq:
ps.addBatch(); )*^PMf
} -[a0\H
ps.executeBatch(); `ge{KB;*n#
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 r! 5C3
CD^_>sya
事务的处理 _SC>EP8:Z
1、关闭Connection的自动提交 KTk%Np
cn.setAutoCommit(false); WZCX&ui