java 数据库基本操作 3JEH
sYxs
1、java数据库操作基本流程 -cNh5~p=
2、几个常用的重要技巧: p#'BV'0bl
可滚动、更新的记录集 $bh2zKB)
批量更新 ~}w(YQy=y
事务处理 l*("[?>I
o\h[K<^>)
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 %k{~Fa
1、取得数据库连接 fm87?RgXD
1)用DriverManager取数据库连接 =PAvPj&}e
例子 016l$K4
String className,url,uid,pwd; d
/&aC#'B
className = "oracle.jdbc.driver.OracleDriver"; 6G7B&"&
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; `23&vGk}
uid = "system"; h1G]w/.ws
pwd = "manager"; Df02#493
Class.forName(className); 8,=Ti7_
Connection cn = DriverManager.getConnection(url,uid,pwd); )-|A|1Uo
2)用jndi(java的命名和目录服务)方式 IV;juFw}G
例子 I:uxj%
String jndi = "jdbc/db"; -'3vQXj&
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); YTQ|Hg6jO
DataSource ds = (DataSource) ctx.lookup(jndi); m7z/@b[
Connection cn = ds.getConnection(); AvRZf-Geg
多用于jsp中 BqP:]
2、执行sql语句 26>e0hBh&
1)用Statement来执行sql语句 < Upn~tH
String sql; 6Bmv1n[X^h
Statement sm = cn.createStatement(); >#*]/t
sm.executeQuery(sql); // 执行数据查询语句(select) sn2SDHY
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); wd~e3%JM
2)用PreparedStatement来执行sql语句 djqSW9
String sql; a2vUZhkR
sql = "insert into user (id,name) values (?,?)"; ?0hk~8c
PreparedStatement ps = cn.prepareStatement(sql); V%dMaX>^i
ps.setInt(1,xxx); a3 6n}R4Q
ps.setString(2,xxx); dP
T)&
... m@.4Wrv
ResultSet rs = ps.executeQuery(); // 查询 x`{ni6}
int c = ps.executeUpdate(); // 更新 Y<:%_]]
y1cAw
3、处理执行结果 *W y0hnr;]
查询语句,返回记录集ResultSet &at>pV3_
更新语句,返回数字,表示该更新影响的记录数 Xp1xhb*^
ResultSet的方法 3%{XJV
1、next(),将游标往后移动一行,如果成功返回true;否则返回false LT!.M m
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 SEr\ u#
FlOKTY
4、释放连接 zv <,
cn.close(); DGO_fR5L
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection 8? W\kf$
eqD%Qdx
可滚动、更新的记录集 `O.*qs5
1、创建可滚动、更新的Statement D*Siy;
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); ;dRTr *
该Statement取得的ResultSet就是可滚动的 tQ5gmj
2、创建PreparedStatement时指定参数 #E5Sc\,
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); ZL #4X*zT
ResultSet.absolute(9000); @za?<G>!'e
批量更新 ;x@9@6_
1、Statement dZ9[w kn
Statement sm = cn.createStatement(); kMo;<Z
sm.addBatch(sql1); qXt2m
sm.addBatch(sql2); %.pX!jL
... VeA;zq
sm.executeBatch() WfhQi;r
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 Q pz01x
2、PreparedStatement D4}WJMQ7s
PreparedStatement ps = cn.preparedStatement(sql); p !AQ
{ B*zb0hdo:
ps.setXXX(1,xxx); Nj %!N
... )$P!7$C-
ps.addBatch(); `dMOBYV
} UN`-;!
ps.executeBatch(); _;yp^^S
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 bo <.7
J}i$ny_3OB
事务的处理 qe"5&