java 数据库基本操作 "j^i6RS
1、java数据库操作基本流程 j6rN t|
2、几个常用的重要技巧: ";K w?
可滚动、更新的记录集 ZitM<Qi&y
批量更新 EApKN@<"
事务处理 Z>rY9VvWD
nr!N%Hi
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 F-yY(b]$
1、取得数据库连接 ^#/FkEt7bp
1)用DriverManager取数据库连接 3nxG>D7
例子 v4P"|vZ$&
String className,url,uid,pwd; #.Rn6|V/4
className = "oracle.jdbc.driver.OracleDriver"; f9D e!"*&
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; (j:
ptQ2$
uid = "system"; ag=d6q
pwd = "manager"; t'qYM5
Class.forName(className); Jz@~$L
Connection cn = DriverManager.getConnection(url,uid,pwd); ?8b19DMK6
2)用jndi(java的命名和目录服务)方式 !|cg=
例子 yeo&Qz2vU
String jndi = "jdbc/db"; P?54"$b
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); +EETo):
DataSource ds = (DataSource) ctx.lookup(jndi); G.W !
Connection cn = ds.getConnection(); 8t-GsjHb
多用于jsp中 ',+yD9 @
2、执行sql语句 ]R__$fl`8
1)用Statement来执行sql语句 kx"10Vw
String sql; +&EXTZ@o
Statement sm = cn.createStatement(); FfoOJzf~o
sm.executeQuery(sql); // 执行数据查询语句(select) zsFzg.$3&
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); ;XKe$fsa~?
2)用PreparedStatement来执行sql语句 mB?x_6#d9
String sql; .fA*WQ!lb
sql = "insert into user (id,name) values (?,?)"; wKV4-uyr
PreparedStatement ps = cn.prepareStatement(sql); #+I'V\[
ps.setInt(1,xxx); kxn&f(5
ps.setString(2,xxx); }Mcb\+[
... UtZ,q!sg
ResultSet rs = ps.executeQuery(); // 查询 j)A#}4jd
int c = ps.executeUpdate(); // 更新 {1W:@6tl
\o9 \ikR
3、处理执行结果 C*7/iRe
查询语句,返回记录集ResultSet ZCiCZ)oc
更新语句,返回数字,表示该更新影响的记录数 1yy?1&88S
ResultSet的方法 i|YS>Pw~j
1、next(),将游标往后移动一行,如果成功返回true;否则返回false wQkM:=t5
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 +.G"ool
xO~ElzGm
4、释放连接 jlEz]@
i
cn.close(); GD
W@/oQr
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection 'rQ"Dc1D
A'WR!*Yt
可滚动、更新的记录集 v3tJtb^'!
1、创建可滚动、更新的Statement bOS)vt*V
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); % RSZ.
该Statement取得的ResultSet就是可滚动的 <n"BPXF~
2、创建PreparedStatement时指定参数 Tb/TP3N
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); M>8J_{r^
ResultSet.absolute(9000); i!wU8@
批量更新 UM}u(;oo%)
1、Statement }pc9uvmIJ
Statement sm = cn.createStatement(); APQq F/
sm.addBatch(sql1); =OVDJ0ozZ
sm.addBatch(sql2); |{ jT+
... Jd2.j?P=
sm.executeBatch() s27IeF3
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 hsZ/Vnn`
2、PreparedStatement *7BfK(9T
PreparedStatement ps = cn.preparedStatement(sql); k;WD[SV
{ /?\3%<vn
ps.setXXX(1,xxx); hlTbCl
... 2z.ot'
ps.addBatch(); 92+8zX
} c\bL_
ps.executeBatch(); YIU3}sJ!
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 ^)VwxH:s
>t D=t8
事务的处理 aQkOQy
1、关闭Connection的自动提交 IgT`on3Y
cn.setAutoCommit(false); &4#Zi.]
2、执行一系列sql语句 bp1AN9~
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close .8hI
ad
Statement sm ; 2hE(h
sm = cn.createStatement(insert into user...); Ia&R/I
sm.executeUpdate(); Uv^\[
sm.close(); 2|1fb-AR
sm = cn.createStatement("insert into corp...); &hCbXs=
sm.executeUpdate(); azcPeAe
sm.close(); <N<Q9}`V
3、提交 +Y\:Q<eMFg
cn.commit(); I7f ^2
4、如果发生异常,那么回滚 L74Mz]v
cn.rollback();