java 数据库基本操作 m#mM2Guxe
1、java数据库操作基本流程 ewSFB <
N
2、几个常用的重要技巧: }r6SV%]:
可滚动、更新的记录集 G_g~-[O
批量更新 ` IiAtS
事务处理 _YY:}'+
{b[8x
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 'QjX2ytgX
1、取得数据库连接 ` a5$VV%J
1)用DriverManager取数据库连接 *Y6BPFE*4
例子 "*WzoRA={
String className,url,uid,pwd; =m=`| Bn
className = "oracle.jdbc.driver.OracleDriver"; 1y l2i|m+
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; 52BlFBNV
uid = "system"; 2Tt@2h_L
pwd = "manager"; Bhl@\Kq
Class.forName(className); o-B9r+N
Connection cn = DriverManager.getConnection(url,uid,pwd); IDb|J%e^P
2)用jndi(java的命名和目录服务)方式 ,YJ\
$?
例子 &+=A;Y)
String jndi = "jdbc/db"; EUU9JnQhBJ
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); C+$dm)M/q
DataSource ds = (DataSource) ctx.lookup(jndi); PBb@J'b
Connection cn = ds.getConnection(); >n)N=Zyu
多用于jsp中 V4}9f5FR
2、执行sql语句 HjV3PFg
1)用Statement来执行sql语句 -4o6 OkK<
String sql; .OVIQxf
Statement sm = cn.createStatement(); qCn(~:
sm.executeQuery(sql); // 执行数据查询语句(select) I3D8xl>P\
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); Sb+pB58&N
2)用PreparedStatement来执行sql语句 l)fF)\ |;=
String sql; a%7ju4CVj
sql = "insert into user (id,name) values (?,?)"; Z16G
PreparedStatement ps = cn.prepareStatement(sql); WaQCq0Enj
ps.setInt(1,xxx); /NaIMo5
ps.setString(2,xxx); b&B<'Wb
... SY_T\
}
ResultSet rs = ps.executeQuery(); // 查询 8l0%:6XbI
int c = ps.executeUpdate(); // 更新 gd-4hR
/Ws@YP
3、处理执行结果 a= ;7
查询语句,返回记录集ResultSet &96I4su
更新语句,返回数字,表示该更新影响的记录数 ^wCjMi(sj
ResultSet的方法 tWD~|<\. )
1、next(),将游标往后移动一行,如果成功返回true;否则返回false d>}pz
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 W`K XO|'p@
r}MXXn,f
4、释放连接 ` ZXX[&C
cn.close(); (Kd;l&8
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection F`3c uL[N
dX: (%_Mn
可滚动、更新的记录集 at${^,&
1、创建可滚动、更新的Statement f@Rn&&-
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); :f?\ mVS+
该Statement取得的ResultSet就是可滚动的 0:R}
2、创建PreparedStatement时指定参数 .@ZqCH
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); ~xpU<Pd*
ResultSet.absolute(9000); y.26:c(
批量更新 =O1N*'e
1、Statement ngj=w;7~+
Statement sm = cn.createStatement(); k!b\qS~Q
sm.addBatch(sql1); Mb=vIk{Bf
sm.addBatch(sql2); !
R?r)G5E
... snOd
3Bw
sm.executeBatch() v-J*PB.0p
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 So\(]S
2、PreparedStatement Q5b?-
P
PreparedStatement ps = cn.preparedStatement(sql); h.ojj$f,
{ i)g=Lew
ps.setXXX(1,xxx); mK5<;$
... *g]q~\b/;
ps.addBatch(); z;@;jQ7
} pI|Lt
ps.executeBatch(); uuHR!
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 3:7J@>
-z./6dQ
事务的处理 :TqvL'9o
1、关闭Connection的自动提交 j{SRE1tqh
cn.setAutoCommit(false); {$)zC*l
2、执行一系列sql语句 fGHYs
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close _?kjIF
Statement sm ; p<*3mbgGO
sm = cn.createStatement(insert into user...); -gefdx6ES
sm.executeUpdate(); F]\(p=U.
sm.close(); xGCW-YR9
sm = cn.createStatement("insert into corp...); !*ct3{m
sm.executeUpdate(); >
$DMVtE0
sm.close(); M.))UKSF
3、提交 mufi>}
cn.commit(); @|v4B[/
4、如果发生异常,那么回滚 <61T)7
cn.rollback();