java 数据库基本操作 v%E!
1、java数据库操作基本流程 nYnv.5
2、几个常用的重要技巧: "^VPe[lA
可滚动、更新的记录集 (<Kf
批量更新 q]P$NeEiZ"
事务处理 uCf _O~
*p^*>~i9)
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 K|rGJ
1、取得数据库连接 7x(z
1)用DriverManager取数据库连接 @$o^(my
例子 ygqWy1C
String className,url,uid,pwd; y,$zSPJCi
className = "oracle.jdbc.driver.OracleDriver"; .:SY:v r
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; ?]58{O(?c
uid = "system"; 9XN/ wp
pwd = "manager"; :b(Nrj&TQ[
Class.forName(className); "J%dI9tM{
Connection cn = DriverManager.getConnection(url,uid,pwd); 0NyM|
2)用jndi(java的命名和目录服务)方式 hoZM;wC
例子 5?Rzyfwk|
String jndi = "jdbc/db"; BPypjS0?8
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); a]?o"{{+
DataSource ds = (DataSource) ctx.lookup(jndi); KU87WpjX
Connection cn = ds.getConnection(); EN@<z;
多用于jsp中 e>b|13X
2、执行sql语句 .^[{~#Pc*
1)用Statement来执行sql语句 oP`Qyk
String sql; XWf1c ~J
Statement sm = cn.createStatement();
9Cq"Szs
sm.executeQuery(sql); // 执行数据查询语句(select) o[ 4e_ @E
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); %OT?2-d
2)用PreparedStatement来执行sql语句 :qK^71gz
String sql; zdN(r<m9"
sql = "insert into user (id,name) values (?,?)"; `it
PreparedStatement ps = cn.prepareStatement(sql); [xl+/F7
ps.setInt(1,xxx); x:`"tJa
ps.setString(2,xxx); $Rf)i W;h
... 3TNj*jo
ResultSet rs = ps.executeQuery(); // 查询 #Dl=K<I
int c = ps.executeUpdate(); // 更新 '/<f'R^
Hni?r!8r
3、处理执行结果 m+pFU?<|
查询语句,返回记录集ResultSet |j!U/n.%w
更新语句,返回数字,表示该更新影响的记录数 $6*6%T5}
ResultSet的方法 !sh>`AF
1、next(),将游标往后移动一行,如果成功返回true;否则返回false ,h* 'Cs04h
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 hixG/%aO
RH0J#6C/
4、释放连接 <PpW.1w
cn.close(); dC8,
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection ,<]~/5-f
=~'{2gsB
可滚动、更新的记录集 A=\:b^\
1、创建可滚动、更新的Statement CdTE~O<)
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); &u9@FFBT8
该Statement取得的ResultSet就是可滚动的 n]v,cfn/=<
2、创建PreparedStatement时指定参数 *ZV=4[#bT
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); +o}mV.&