java 数据库基本操作 /dg?6XT/
1、java数据库操作基本流程 3,v/zcV
2、几个常用的重要技巧: m4OnRZYlw
可滚动、更新的记录集 -E6av|c,F
批量更新 53aJnxX
事务处理 k?Hi_;o
LvS5N)[
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 -6-rXD
1、取得数据库连接 Ww8U{f
1)用DriverManager取数据库连接 )?radg
例子 jEQ_#KKYJ
String className,url,uid,pwd; wxK71OH
className = "oracle.jdbc.driver.OracleDriver";
W^^0Rh_
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; g,WTXRy
uid = "system"; T2]8w1l&K
pwd = "manager"; 4.,|vtp
Class.forName(className); ^kcuRJ0*$
Connection cn = DriverManager.getConnection(url,uid,pwd); d_$0
2)用jndi(java的命名和目录服务)方式 -:d{x#
例子 ~b#<HG\,,
String jndi = "jdbc/db"; t*Ro2QZ
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); f2gh|p`
DataSource ds = (DataSource) ctx.lookup(jndi); rz|Sjtq
Connection cn = ds.getConnection(); }*9F `=%F
多用于jsp中 PtUS7[]
2、执行sql语句 ~ u1~%
1)用Statement来执行sql语句 t1iz5%`p}
String sql; |7,$.MK-@
Statement sm = cn.createStatement(); uZ_?x~V/
sm.executeQuery(sql); // 执行数据查询语句(select) H74'I}
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); }03?eWk/y
2)用PreparedStatement来执行sql语句 <!G /&T
String sql; ;8vB7|54.
sql = "insert into user (id,name) values (?,?)"; D+0il=5
PreparedStatement ps = cn.prepareStatement(sql); UGM:'xa<T
ps.setInt(1,xxx); 9=iMP~?xF
ps.setString(2,xxx); d!<>Fh^6,
... W?E01"p
ResultSet rs = ps.executeQuery(); // 查询 y=\&z&3$
int c = ps.executeUpdate(); // 更新 Oz\J+
,)\G<q
yO6
3、处理执行结果 ]5
]wyDj
查询语句,返回记录集ResultSet @+M1M2@Xz
更新语句,返回数字,表示该更新影响的记录数 \NDW@!X
ResultSet的方法 q'H6oD`
1、next(),将游标往后移动一行,如果成功返回true;否则返回false |j'@no_rv
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 YG*<jKcX
>#r0k|3J^J
4、释放连接 *wqR .n?
cn.close(); xG
edY*[`
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection GBg
aDz%
%%:r
可滚动、更新的记录集 ]5*H/8Ke7
1、创建可滚动、更新的Statement n3V$Xtxw
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); M-Vz$D/aed
该Statement取得的ResultSet就是可滚动的 6w3[PNd
2、创建PreparedStatement时指定参数 0# 1~'e
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); P;y!Y/$ C
ResultSet.absolute(9000); 9fbo
批量更新 > (n/
1、Statement R3_;!/1
Statement sm = cn.createStatement(); |]q{qsy
sm.addBatch(sql1); U<XfO'XJ
sm.addBatch(sql2); R=R]0
... U"@p3$2QW
sm.executeBatch() }3Ke
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 ~IO'"h'w
2、PreparedStatement U%1M?vT/
PreparedStatement ps = cn.preparedStatement(sql); ;A"i.:ZT
{ tD}{/`{_t
ps.setXXX(1,xxx); f9_Pn'"I
... !T)_(}|6}
ps.addBatch(); :SN? t
} mg70%=qM0f
ps.executeBatch(); A9Ea}v9:
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 |iSwG=&
/P[u vO
事务的处理 Tp~Qg{%Og
1、关闭Connection的自动提交 X eis_
cn.setAutoCommit(false); [=.iJ5,{2
2、执行一系列sql语句 1GR|$E
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close FR50y+h^$
Statement sm ; 9P
<1/W!
sm = cn.createStatement(insert into user...); Wkb>JnPo
sm.executeUpdate(); ~9!@BL\
sm.close(); DD7D&@As
sm = cn.createStatement("insert into corp...); AxJqLSfyb,
sm.executeUpdate(); HWou&<EK
sm.close(); Xsb.xxK.
3、提交 (Y&gse1}!
cn.commit(); 56C'<#
4、如果发生异常,那么回滚 _8`S&[E?
cn.rollback();