java 数据库基本操作 8vhg{L..
1、java数据库操作基本流程 'USol<
2、几个常用的重要技巧: Up61Xn
可滚动、更新的记录集 =WaZy>n}7
批量更新 hpftVEB
事务处理 N:#"4e
u$7od$&S
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 pi>,>-Z
1、取得数据库连接 t)Iu\bP
1)用DriverManager取数据库连接 V~V_+
例子 p'lL2n$E
String className,url,uid,pwd; !,rp|
className = "oracle.jdbc.driver.OracleDriver"; , _K /e
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; wnaT~r@U'
uid = "system"; aS^
4dEJ
pwd = "manager"; "3kIQsD|j
Class.forName(className); /{eD##vhP
Connection cn = DriverManager.getConnection(url,uid,pwd); sN6R0YW
2)用jndi(java的命名和目录服务)方式 s~ZLnEb
例子 `QH-VR\_
String jndi = "jdbc/db"; SxC
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); Fdgu=qMm
DataSource ds = (DataSource) ctx.lookup(jndi); PcXz4?Q$
Connection cn = ds.getConnection(); ?Y:>Ouv*z'
多用于jsp中 3},0b8};
2、执行sql语句 ;\P\0pI50
1)用Statement来执行sql语句 $wL
zaZL|
String sql; >t-9yO1XQq
Statement sm = cn.createStatement(); #G[S
sm.executeQuery(sql); // 执行数据查询语句(select) J2X;=X5
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); WoP5[.G
2)用PreparedStatement来执行sql语句 [:cy.K!Uo%
String sql; Wb*A};wE
sql = "insert into user (id,name) values (?,?)"; 3$fzqFo
PreparedStatement ps = cn.prepareStatement(sql); 6#sd"JvtQ
ps.setInt(1,xxx); Zt3"4d4
ps.setString(2,xxx); _*d8:|qw
... o!q3+Pp;}
ResultSet rs = ps.executeQuery(); // 查询 ))y`q@
int c = ps.executeUpdate(); // 更新 [O)
Q\|k
Hw 7
3、处理执行结果 ),9^hJ1+@
查询语句,返回记录集ResultSet L : hEt
更新语句,返回数字,表示该更新影响的记录数 ?:D#\4=US
ResultSet的方法 p^QEk~qw
1、next(),将游标往后移动一行,如果成功返回true;否则返回false .>4Zt'gCt
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 !(:R=J_h
W @R\m=e2
4、释放连接 QnsD,F; /
cn.close(); oPSucz&s
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection gq[|>Rs75
,e6n3]W8
可滚动、更新的记录集 B d#D*"gx
1、创建可滚动、更新的Statement [,A*nU$
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); ^Ht!~So
该Statement取得的ResultSet就是可滚动的 )bJS*#
2、创建PreparedStatement时指定参数 vbH?[Zr?
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); PuKT0*_ 7
ResultSet.absolute(9000); OEz'&))J
批量更新 R>BZQugZ~
1、Statement dso6ZRx
Statement sm = cn.createStatement(); cg16|
sm.addBatch(sql1);
T06BrX
sm.addBatch(sql2); ,(h:0L2v7d
... 8ZY F%
sm.executeBatch() T$ <l<.Qd
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 q J)[2:.G
2、PreparedStatement ELh`|X
PreparedStatement ps = cn.preparedStatement(sql); PL;PId<9w
{ XH9Y|FX%#
ps.setXXX(1,xxx); :bJT2o[
... FW](GWp`:
ps.addBatch(); S8+GM
} e^;<T9Esr
ps.executeBatch(); L9,;zkgo
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 mB.ybrig
IM""s]
事务的处理 gP&G63^
1、关闭Connection的自动提交 @FC|1=+
cn.setAutoCommit(false); T8nOb9Nrj
2、执行一系列sql语句 ZbmBwW_ 7
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close \UBTNY,
Statement sm ; uBdS}U
sm = cn.createStatement(insert into user...); _gAU`aO^
sm.executeUpdate(); "
3ryp
A
sm.close(); uVnbOqR<X
sm = cn.createStatement("insert into corp...); X~m*` UH
sm.executeUpdate(); 1y\-Iz^
sm.close(); ,ALEfepo
3、提交 |=R@nn
cn.commit(); teRK#: .P
4、如果发生异常,那么回滚 Ancka
cn.rollback();