java 数据库基本操作 fq_ 6xs
1、java数据库操作基本流程 )k=8.j4
2、几个常用的重要技巧: HIeWgw^"
可滚动、更新的记录集 +#n5w8T)M
批量更新 c.,eIiL
事务处理 sl>4O]N
mI"`.
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 pn>zuHe
1、取得数据库连接 pT:CvJ
1)用DriverManager取数据库连接 Yw4c`MyL
例子 {WT"\Xj>B?
String className,url,uid,pwd; }G_ i+
className = "oracle.jdbc.driver.OracleDriver"; -N~*h
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; PUF"^9v
uid = "system"; hP,SvN#!2
pwd = "manager"; [Kx_ %Le
Class.forName(className); 0}-&v+
Connection cn = DriverManager.getConnection(url,uid,pwd); zZGPA j
2)用jndi(java的命名和目录服务)方式 74xI#`E
例子 E.t9F3
String jndi = "jdbc/db"; M"ZP s
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); 'l)@MXbGL
DataSource ds = (DataSource) ctx.lookup(jndi); uXyNj2(d.
Connection cn = ds.getConnection(); G{$9e}#
多用于jsp中 t&eY+3y,T
2、执行sql语句 zH}u9IR3`
1)用Statement来执行sql语句 D3vd O2H
String sql; ,m9Nd "6\
Statement sm = cn.createStatement(); A:0
sm.executeQuery(sql); // 执行数据查询语句(select) +|r)
;>b
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); n!A')]y"
2)用PreparedStatement来执行sql语句 v6;XxBR6
String sql; e#)}.
sql = "insert into user (id,name) values (?,?)"; dGrOw)
PreparedStatement ps = cn.prepareStatement(sql); 5d<-y2!M
ps.setInt(1,xxx); coiTVDwA
ps.setString(2,xxx); j"yL6Q9P
... Xo;J1H
ResultSet rs = ps.executeQuery(); // 查询 [P`Q_L,+
int c = ps.executeUpdate(); // 更新 #c./<<P5}
_T<ney}Y<
3、处理执行结果 >5i1M^g(
查询语句,返回记录集ResultSet m%'9z L c
更新语句,返回数字,表示该更新影响的记录数 HkGzyDt
ResultSet的方法 g=:%j5?.e
1、next(),将游标往后移动一行,如果成功返回true;否则返回false rM/*_0[`d
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 KSMe#Qnw
!nU
4、释放连接 `3*>tq
cn.close(); w1h07_u;v
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection *Iyv${
Oh5(8.<y
可滚动、更新的记录集 =3 }@\f#
1、创建可滚动、更新的Statement {y)s85:t
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); Bm;{dO
该Statement取得的ResultSet就是可滚动的 XGk8Ki3w
2、创建PreparedStatement时指定参数 rX{QgyY&
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); WB"$NYB
ResultSet.absolute(9000); tlA4oVII
批量更新 N"2P&Ho]
1、Statement RT F9;]Ti
Statement sm = cn.createStatement(); Z[slN5]([
sm.addBatch(sql1); 1Hy
sm.addBatch(sql2); tt6ElP|D
... 2sk^A
ly
sm.executeBatch() <~u.:x@ R
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 b=Zg1SqV
2、PreparedStatement 4qrPAt
PreparedStatement ps = cn.preparedStatement(sql); kZWc(LwA
{ l)Q,*i
ps.setXXX(1,xxx); bv)E>%Yy
... Z:&"Ax
ps.addBatch(); b^;19]/RW
} t9zPJQlT}
ps.executeBatch(); GKZn|<Y|{c
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 axxdW)+K
@$F(({?
事务的处理 acRPKTs
H
1、关闭Connection的自动提交 jgs kK
cn.setAutoCommit(false); _C)u#]t
2、执行一系列sql语句 &YmOXKf7
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close fc+P`r
Statement sm ; ?A8Uf=
sm = cn.createStatement(insert into user...); !3-mPG<
]
sm.executeUpdate(); Cc1sZWvz
sm.close(); P zzX Ds6
sm = cn.createStatement("insert into corp...); e-]k{_wm
sm.executeUpdate(); (b GiBsb
sm.close(); .1t$(]CyC
3、提交 KQNSYI7a
cn.commit(); M+ ^]j
4、如果发生异常,那么回滚 pr>K#@^
cn.rollback();