java 数据库基本操作 P'KaW u9z
1、java数据库操作基本流程 \@8$tQCZ
2、几个常用的重要技巧: wtndXhVC4>
可滚动、更新的记录集 \3hhM}6)DM
批量更新 [58xT>5`m
事务处理 %XMrSlSOp
`
Cdk
b5
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 a 9(1 6k
1、取得数据库连接 Aj*0nV9_
1)用DriverManager取数据库连接 ]tanvJG}'
例子 >w9fFm!Q
String className,url,uid,pwd; ~2beVQ(U
className = "oracle.jdbc.driver.OracleDriver"; UsNr$MO
{
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; d>M&jSCL
uid = "system"; ;m,lS_[c
pwd = "manager"; @c,}\"(
Class.forName(className); J@=1zL
Connection cn = DriverManager.getConnection(url,uid,pwd); KCGs*kp>
2)用jndi(java的命名和目录服务)方式 O{,Uge2n,
例子 _~d C>`K
String jndi = "jdbc/db"; {W62%>v
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); qDxz`}Ly=
DataSource ds = (DataSource) ctx.lookup(jndi); t^)q[g
Connection cn = ds.getConnection(); $h`?l$jC(@
多用于jsp中 /x"gpKwsB
2、执行sql语句 DzkE*vR
1)用Statement来执行sql语句 jX$TiG
String sql; `Yn^ -W
Statement sm = cn.createStatement(); A=o
p R
sm.executeQuery(sql); // 执行数据查询语句(select) gEcVQPD@
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); p{"p<XFyO
2)用PreparedStatement来执行sql语句 CeNpJ
String sql;
.taJCE
sql = "insert into user (id,name) values (?,?)"; #r `hK)
PreparedStatement ps = cn.prepareStatement(sql); 5H1SC8+B,
ps.setInt(1,xxx); IpXg2QbN
ps.setString(2,xxx); %qcBM~efT
... L,!Z
ResultSet rs = ps.executeQuery(); // 查询 a\$PqOB!
int c = ps.executeUpdate(); // 更新 ]F r+cP
|{k;pfPV
3、处理执行结果 !u.{<51b
查询语句,返回记录集ResultSet zO<EbqNe!
更新语句,返回数字,表示该更新影响的记录数 2T<QG>;)j
ResultSet的方法 URck#5
1、next(),将游标往后移动一行,如果成功返回true;否则返回false ps[TiW{q;
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 g2l|NI#c^
nchhNU
4、释放连接 xG
7;Ps4L
cn.close(); YES!?^}
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection m0t5oO
WW2VW-Hk
可滚动、更新的记录集 4f~CG
r
1、创建可滚动、更新的Statement !T@>Ld:
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); b#FN3AsR
该Statement取得的ResultSet就是可滚动的 v1?P$f*g
2、创建PreparedStatement时指定参数 m=k(6
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); !s/ij'T
ResultSet.absolute(9000); %@'9<