java 数据库基本操作 yqq1 a
o
1、java数据库操作基本流程 w!20
2、几个常用的重要技巧: >[;@
[4}
可滚动、更新的记录集 SKH}!Id}n
批量更新 )DXt_leLg
事务处理 <3B^5p\/
kPs?
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 KM?4J6jH
1、取得数据库连接 /#Aw7F$Ey
1)用DriverManager取数据库连接 ~TRC-H
例子 uH9Vj<E$K
String className,url,uid,pwd; O0qG
6a
className = "oracle.jdbc.driver.OracleDriver"; [G|.
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; ``WTg4C(Y
uid = "system"; n]IF`kYQV
pwd = "manager"; }Kgi!$<aQx
Class.forName(className); Z?'CS|ud
Connection cn = DriverManager.getConnection(url,uid,pwd); H:~p5t
2)用jndi(java的命名和目录服务)方式 9u(pn`e 3
例子 1PwtzH.w
String jndi = "jdbc/db"; 7<^+)DsS?
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); 2 L4[~>
DataSource ds = (DataSource) ctx.lookup(jndi); ]H
n:c'aT
Connection cn = ds.getConnection(); rS BI'op
多用于jsp中 hc|A:v)]
2、执行sql语句 y5j:+2|I
1)用Statement来执行sql语句 :.*Q@X}-I
String sql; Zt3sU_
Statement sm = cn.createStatement(); a|u#w~
sm.executeQuery(sql); // 执行数据查询语句(select) M?h{'$T
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); G7 UUx+ X
2)用PreparedStatement来执行sql语句 ['}|#3*w
String sql; $?PI>9g!
sql = "insert into user (id,name) values (?,?)"; ?l9sj]^w
PreparedStatement ps = cn.prepareStatement(sql); jV sH
ps.setInt(1,xxx); ]AY 4bm
ps.setString(2,xxx); $k\bP9
... vTK%8qoZ
ResultSet rs = ps.executeQuery(); // 查询 , lR(5ZI
int c = ps.executeUpdate(); // 更新 ]jhi"BM
a 20w.6F
3、处理执行结果 iP(MDVg
查询语句,返回记录集ResultSet >j=ZB3yZ
更新语句,返回数字,表示该更新影响的记录数 U7g`R@
ResultSet的方法 $#hU_vr
1、next(),将游标往后移动一行,如果成功返回true;否则返回false f 3H uT=n
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 oDA'$]UL
gGVt( ^
4、释放连接 oWY3dc
cn.close(); .jQx2O
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection lm4A%4-db
'r!!W0-K
可滚动、更新的记录集 W/2y;@
1、创建可滚动、更新的Statement ]vQa~}
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); _R\FB|_
该Statement取得的ResultSet就是可滚动的 ?C2(q6X+s
2、创建PreparedStatement时指定参数 ,"`20.Lv
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); #'&-S@/nQs
ResultSet.absolute(9000); -w"I
批量更新 o!BCR:
1、Statement &s`)_P[
Statement sm = cn.createStatement(); b;QgL_w
sm.addBatch(sql1); 'bl9fO4v
sm.addBatch(sql2); oT{9P?K8
... u;t<rEC2
sm.executeBatch() 1Gr^,Ry
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 -KGJr
2、PreparedStatement F `:Q
PreparedStatement ps = cn.preparedStatement(sql); bra2xHK@
{ wMCMrv:
ps.setXXX(1,xxx); t`JT
... =cl#aS}e8
ps.addBatch(); s1_Y~<yX
} $JOz7j(
ps.executeBatch(); bDvGFSAH
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 j>JBZ#g
E^rBs2;9
事务的处理 bKS/T^UQ
1、关闭Connection的自动提交 AJ/Hw>>$?m
cn.setAutoCommit(false); 4xW~@meNB
2、执行一系列sql语句 @JlT*:Dz
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close )isS^O$qH
Statement sm ;
M]5l-i$
sm = cn.createStatement(insert into user...); oi0O4J%H
sm.executeUpdate(); n8EKTuy
sm.close(); VzSkqWF/"
sm = cn.createStatement("insert into corp...); lD$s, hp
sm.executeUpdate(); 7RUztu\_
sm.close(); YeOn
3、提交 [1(eSH
cn.commit(); ti+e U$
4、如果发生异常,那么回滚 }`
3-
cn.rollback();