java 数据库基本操作 cFZcBiw
1、java数据库操作基本流程 qN"Q3mU^h*
2、几个常用的重要技巧: "OO)m](w
可滚动、更新的记录集 jAcrXB*
批量更新 PrKH{nyJk
事务处理 U!\~LKfA
=o5|W'>`
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 `PUGg[Zx^
1、取得数据库连接 S
aH':UN
1)用DriverManager取数据库连接 "}x%5/(
例子 &~aS24c
String className,url,uid,pwd; `x]`<kS;
className = "oracle.jdbc.driver.OracleDriver"; *6bO2LO"
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; -hY@r 7y
uid = "system"; }3}H}
pwd = "manager"; aJ"m`5]=%
Class.forName(className); *N&~Uq^
Connection cn = DriverManager.getConnection(url,uid,pwd); SaIY-PC
2)用jndi(java的命名和目录服务)方式 |E9'ii&?B
例子 o* ~aB_
String jndi = "jdbc/db"; f}t8V% ^E
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); x^79s_h5
DataSource ds = (DataSource) ctx.lookup(jndi); 7tP%tp
ez
Connection cn = ds.getConnection(); lv>^P>S(O
多用于jsp中 Miz?t*|{[
2、执行sql语句 ;O7Vl5R
1)用Statement来执行sql语句 f.Y [2b
String sql; T jE'X2/
Statement sm = cn.createStatement(); ,rS?^"h9
sm.executeQuery(sql); // 执行数据查询语句(select) *>h|<|T'
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); Y:R*AOx
2)用PreparedStatement来执行sql语句 v&qL r+_7
String sql; 2e9.U/9
sql = "insert into user (id,name) values (?,?)"; EO`eg]
PreparedStatement ps = cn.prepareStatement(sql); $Jo4n>/
ps.setInt(1,xxx); U,K=(I7OBX
ps.setString(2,xxx); &/n*>%2
... O.DO,]Uh
ResultSet rs = ps.executeQuery(); // 查询 3yrb7Rn3
int c = ps.executeUpdate(); // 更新 neQ~h4U"
+[rQf<*
3、处理执行结果 1,(WS
F
查询语句,返回记录集ResultSet +#Wwah$
更新语句,返回数字,表示该更新影响的记录数 [w90gp1O[
ResultSet的方法 v5F+@ug
1、next(),将游标往后移动一行,如果成功返回true;否则返回false :8`~dj.
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 3rY\y+m
T&4f}g/
4、释放连接 j5wfqi
cn.close(); b Rc,Y<
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection n?778Wo}
_G&gF.|
可滚动、更新的记录集 jU-aa+
1、创建可滚动、更新的Statement ^IKT!"J&?
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); edo+ o{^
该Statement取得的ResultSet就是可滚动的 nMK$&h,{
2、创建PreparedStatement时指定参数 k1.%ZZMM
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); c'>_JlG~
ResultSet.absolute(9000); x"n++j
批量更新 & 'CUc/,
1、Statement
O7CW#F
Statement sm = cn.createStatement(); *M)M!jTv
sm.addBatch(sql1); }K5okxio
sm.addBatch(sql2); I^n DO\m <
... f92z/5%V
sm.executeBatch() TlowEh8r
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 &1Cs'
2、PreparedStatement ,+5:}hR+
PreparedStatement ps = cn.preparedStatement(sql); d'"|Qg_'
{ wX5q=I
ps.setXXX(1,xxx); d
N$,AO T
... !S%0#d2
ps.addBatch(); 1F_$[iIX]
} \,fa"^8
ps.executeBatch(); ~yt 7L,OQ
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 Cs(sar:7
>(-A"jf
事务的处理 *4e?y
1、关闭Connection的自动提交 \1SC:gN*#
cn.setAutoCommit(false); i),bAU!+m
2、执行一系列sql语句 'J$@~P
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close 9GRQ^E
Statement sm ; eyuyaSE
sm = cn.createStatement(insert into user...); ):_@i
sm.executeUpdate(); e=nvm'[h
sm.close(); q|:wzdmNZ
sm = cn.createStatement("insert into corp...); 19U&