java 数据库基本操作 U6K|fYN`
1、java数据库操作基本流程 F%|h;+5
2、几个常用的重要技巧: AH^/V}9H
可滚动、更新的记录集 A"]YM'.
批量更新 ^W^OfY
事务处理 :X=hQ:>P
+>,I1{u%&
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 *w&e\i|7
1、取得数据库连接
s!J9|]o
1)用DriverManager取数据库连接 It(_v
例子 A^g(k5M*
String className,url,uid,pwd; TOt dUO
className = "oracle.jdbc.driver.OracleDriver";
];m_4
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; .Mbz3;i0
uid = "system"; tw;}jh
pwd = "manager"; S[gx{Bxiw
Class.forName(className); 5!
{D!
Connection cn = DriverManager.getConnection(url,uid,pwd); ]Ze1s02(
2)用jndi(java的命名和目录服务)方式 sRs>"zAg
例子 M%HU4pTW#o
String jndi = "jdbc/db"; e6*8K@LHB
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); G{}VPcrbC
DataSource ds = (DataSource) ctx.lookup(jndi); RZLq]8pM
Connection cn = ds.getConnection(); P:c w|Q
多用于jsp中 @"A4$`Xi3
2、执行sql语句 N8jIMb'<
1)用Statement来执行sql语句 (QEG4&9
String sql; HPl<%%TI
Statement sm = cn.createStatement(); L *wYx|
sm.executeQuery(sql); // 执行数据查询语句(select) SUiOJ[5,
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); ^8WRqQdx
2)用PreparedStatement来执行sql语句 9[4xFE?|
String sql; e'~3oqSvR
sql = "insert into user (id,name) values (?,?)"; >MZ/|`[M
PreparedStatement ps = cn.prepareStatement(sql); ytImB`'\
ps.setInt(1,xxx); ?,z}%p
ps.setString(2,xxx); oH@78D0A
... `Di{}/2
ResultSet rs = ps.executeQuery(); // 查询 w)f#V s
int c = ps.executeUpdate(); // 更新 x2xRBkRg=
5pX6t
3、处理执行结果 ,tFg4k[
查询语句,返回记录集ResultSet ("KF'fp&M2
更新语句,返回数字,表示该更新影响的记录数 1MFbQs^
ResultSet的方法 &ZO0r ^
1、next(),将游标往后移动一行,如果成功返回true;否则返回false =X}J6|>X
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 \fOEqe*5SM
Rq -ZL{LR7
4、释放连接 VbYdZCC
cn.close(); W/N7vAx X
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection 8*X4\3:*N
KNl$3nX
可滚动、更新的记录集 w0.
u\
1、创建可滚动、更新的Statement Eci\a]
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); "+c-pO`Wg
该Statement取得的ResultSet就是可滚动的 kh<2BOV
2、创建PreparedStatement时指定参数 q.vIc
?a
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); 4euO1=
ResultSet.absolute(9000); e-;}366}
批量更新
7GGUV
1、Statement A/(a`"mK|'
Statement sm = cn.createStatement(); @ Qe0! (_=
sm.addBatch(sql1); (7Qo
sm.addBatch(sql2); 637:
oT_`O
... GgU/!@
sm.executeBatch() Om&Dw|xG8
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 \V:^h[ad
2、PreparedStatement cQ|NJ_F{1
PreparedStatement ps = cn.preparedStatement(sql); ]e3Ax(i)
{ NK+o1
ps.setXXX(1,xxx); 9WHddDA
... buC{r,
ps.addBatch(); kfNWI#'9
} bt *k.=p
ps.executeBatch(); ICCc./l|
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 -Za/p@gM
[QTV9
事务的处理 I fir ,8
1、关闭Connection的自动提交 1YA% -~
cn.setAutoCommit(false); Xj*Wu_
2、执行一系列sql语句 :Tc^y%b0
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close #$vEGY}1
Statement sm ; ^Cmyx3O^
sm = cn.createStatement(insert into user...); 0(Ij%Wi,
sm.executeUpdate(); i4Jc.8^9$
sm.close();
c> af
sm = cn.createStatement("insert into corp...); =41xkAMnk
sm.executeUpdate(); 9L9sqZUB
sm.close(); !k%#R4*>
3、提交 )"LJ
hLg
cn.commit(); ijcm2FJcG
4、如果发生异常,那么回滚 g0
[w-?f
cn.rollback();