java 数据库基本操作 {x$#5PW
1、java数据库操作基本流程 $fG/gYvI\
2、几个常用的重要技巧: b .@dUuKz-
可滚动、更新的记录集 tV%\Jk),
批量更新 8zv6Mx
事务处理 AE~}^(G`
?Cl"jcQ*
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 7]53GGNO
1、取得数据库连接 b8Sl3F?-~
1)用DriverManager取数据库连接 g#NUo/
例子 'S>Jps@
String className,url,uid,pwd; <<6#Uz.1
className = "oracle.jdbc.driver.OracleDriver"; =v;@w$#
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; D]y.!D{l2
uid = "system"; o*8 pM`uw
pwd = "manager"; 6n g9 o6
Class.forName(className); breVTY7 S
Connection cn = DriverManager.getConnection(url,uid,pwd); =-Tetp
2)用jndi(java的命名和目录服务)方式 s_$@N!
例子 ,bg#pG!x Q
String jndi = "jdbc/db"; ]C^*C|
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); BGOI
DataSource ds = (DataSource) ctx.lookup(jndi); /pEkig7M
Connection cn = ds.getConnection(); H2-(
多用于jsp中 kv2:rmv
2、执行sql语句 2j|Eh
1)用Statement来执行sql语句
EwsJa3
`
String sql; |'#NDFI>}
Statement sm = cn.createStatement(); M3;B]iRQD
sm.executeQuery(sql); // 执行数据查询语句(select) h<q``hn>
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); s4*,ocyBP
2)用PreparedStatement来执行sql语句 F*u;'K
String sql; tc Z~T
sql = "insert into user (id,name) values (?,?)"; uLht;-`{n
PreparedStatement ps = cn.prepareStatement(sql); qlP=Y .H
ps.setInt(1,xxx); %hh8\5l.:
ps.setString(2,xxx); ':@qE\(
... Fh;(1X75I
ResultSet rs = ps.executeQuery(); // 查询 X8TZePh
int c = ps.executeUpdate(); // 更新 j=LF1dG"
1:8: yFV
3、处理执行结果 ~b/>TKn+
查询语句,返回记录集ResultSet )kUw,F=6
更新语句,返回数字,表示该更新影响的记录数 x~.U,,1
ResultSet的方法 8B5%IgA
1、next(),将游标往后移动一行,如果成功返回true;否则返回false 7085&\9
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 fAi113q!
ycN_<
4、释放连接 u ""=9>0
cn.close(); ?u|g2!{_
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection WF7RMQ51j
{cFei3'q
可滚动、更新的记录集 |iI`p-L9
1、创建可滚动、更新的Statement "lt[)3*
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); pY@+.V`a
该Statement取得的ResultSet就是可滚动的 qZ.\GHS
2、创建PreparedStatement时指定参数 |9h[Q[m
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); zc#`qa:0
ResultSet.absolute(9000); qJsEKuOs
批量更新 D3OV.G]`
1、Statement h2nyP
Statement sm = cn.createStatement(); 'n=D$j]X
sm.addBatch(sql1); bhRpYP%x
sm.addBatch(sql2); 53c6dl
... Fei$94a
sm.executeBatch() w~`P\i@
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 U+z&jdnhDR
2、PreparedStatement ScD9Ct*):C
PreparedStatement ps = cn.preparedStatement(sql); >8##~ZuF+
{ _1a2Z\
ps.setXXX(1,xxx); \[BnAgsF
... AWzpk}\
ps.addBatch(); R B!g,u
} 6ZE]7~X
ps.executeBatch(); NTC,Vr\A
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 z{ 8!3>:E
f"Z2&