java 数据库基本操作 B6|=kl2C
1、java数据库操作基本流程 [{'` |
2、几个常用的重要技巧: ]BX|G`CCc
可滚动、更新的记录集 ~|+
批量更新 9D-PmSnv
事务处理 i]YH"t8GY
(AV j_Cw
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 joYj`K
1、取得数据库连接 0(HUy`]>
1)用DriverManager取数据库连接 vr2t MD
例子 _18) XR
String className,url,uid,pwd; yA=#Ji
className = "oracle.jdbc.driver.OracleDriver"; U%m,:b6V
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; O &;Cca
uid = "system"; 05$CIS>!
pwd = "manager"; }eSaF@.
Class.forName(className); THkg,*;:
Connection cn = DriverManager.getConnection(url,uid,pwd); 4Bs '5@
2)用jndi(java的命名和目录服务)方式 eUQrn>`
例子 }cEcoi<v!
String jndi = "jdbc/db"; AwUc U;"9>
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); M;-PrJdyt
DataSource ds = (DataSource) ctx.lookup(jndi); ={B%qq
Connection cn = ds.getConnection(); 'HzF/RKh
多用于jsp中 Z`T]jm-3
2、执行sql语句 u{o3
1)用Statement来执行sql语句 E WrIDZi
String sql; )pbsvR_
Statement sm = cn.createStatement(); }&F|u0@b
sm.executeQuery(sql); // 执行数据查询语句(select) YZMSiDv[e
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); Vo"Wr>F
2)用PreparedStatement来执行sql语句 P XKEqcQR
String sql; +Hgil
sql = "insert into user (id,name) values (?,?)"; ]{s0/(EA
PreparedStatement ps = cn.prepareStatement(sql); )%dxfwd6
ps.setInt(1,xxx); j4k\5~yzS
ps.setString(2,xxx); FC@h6\+a
... I() =Ufs5z
ResultSet rs = ps.executeQuery(); // 查询 T\?$7$/V
int c = ps.executeUpdate(); // 更新 [MhKR }a
_wH>h$E
3、处理执行结果 -M5vh~Tp
查询语句,返回记录集ResultSet t-B5,,`
更新语句,返回数字,表示该更新影响的记录数 ti'B}bH>'
ResultSet的方法 Ql"kJ_F!br
1、next(),将游标往后移动一行,如果成功返回true;否则返回false ,cE yV74
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 2. '` mGu
& 6'Rc#\P
4、释放连接 n&OM~Vs
cn.close(); y^Uh<L0M
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection j 5}'*
_Ne fzZWUJ
可滚动、更新的记录集 5(>SFxz"t
1、创建可滚动、更新的Statement xP4}LL9)
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); }`cf3'rdk
该Statement取得的ResultSet就是可滚动的 )Zf1%h~0r
2、创建PreparedStatement时指定参数 !]5}N^X
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); V6Mt;e)C
ResultSet.absolute(9000); "i#aII+T
批量更新 v5>A1\
1、Statement L4,b ThSG
Statement sm = cn.createStatement(); `AYq,3V
sm.addBatch(sql1); KpA1Ac)T
sm.addBatch(sql2); m??Py"1y
... d~1uK-L]*
sm.executeBatch() '2GnA ws^
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 &&nbdu
2、PreparedStatement vJL Gy]
PreparedStatement ps = cn.preparedStatement(sql); #x;,RPw5
{ G4uG"
ps.setXXX(1,xxx); 8N%nG(
0
... fuzB;Ea
ps.addBatch(); h2 KI
} D/?Ec\t
ps.executeBatch(); g5
T
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 T'9ZR,{F
k,[*h-{8
事务的处理 DmpT<SI+!
1、关闭Connection的自动提交 ;-6-DEL
cn.setAutoCommit(false); baBBn%_V
2、执行一系列sql语句 "$XX4w
M
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close V:$+$"|
Statement sm ; <
Hkq
sm = cn.createStatement(insert into user...); 3w</B-|nQ
sm.executeUpdate(); CJ*
D
sm.close(); '`3#FCg
sm = cn.createStatement("insert into corp...); 8q@Z
sm.executeUpdate(); 6|zhqb|s
sm.close(); &E_a0*)e
3、提交 #,%7tXOLR
cn.commit(); 1h&`mqY)L.
4、如果发生异常,那么回滚 |@vkQ
cn.rollback();