java 数据库基本操作 `CA-s
1、java数据库操作基本流程 C&YJvMu
2、几个常用的重要技巧: |Wd]:ijJ
可滚动、更新的记录集 `9E:V=
批量更新 @GDe{GG+
事务处理 8!2NZOZOS
9\ZlRYnc=
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 Pz7{dQqjk#
1、取得数据库连接 pp@Jndlg
1)用DriverManager取数据库连接 4*'5EBa1
例子 23?\jw3w
String className,url,uid,pwd; T4dLuJl
className = "oracle.jdbc.driver.OracleDriver"; bRT1~)
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; {XH!`\
uid = "system"; @8E mY,{;
pwd = "manager"; =Ryh@X&
Class.forName(className); M]4qS('[
Connection cn = DriverManager.getConnection(url,uid,pwd); S&_Z,mT./
2)用jndi(java的命名和目录服务)方式 M}=X/*T
例子 "
2A`M~
String jndi = "jdbc/db"; 1DVu`<OXcH
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); xS?[v&"2
DataSource ds = (DataSource) ctx.lookup(jndi); Dg3Sn|!f
Connection cn = ds.getConnection(); RAYDl=}
多用于jsp中 OD7tM0Wn
2、执行sql语句 iU"jV*P]
1)用Statement来执行sql语句 CB_ww=
String sql; ts%XjCN[
Statement sm = cn.createStatement(); 7s@%LS
sm.executeQuery(sql); // 执行数据查询语句(select) <wWZ]P2]
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); qp3J/(F
2)用PreparedStatement来执行sql语句 nt.A X
String sql; Q%)da)0:c
sql = "insert into user (id,name) values (?,?)"; #$7d1bx
PreparedStatement ps = cn.prepareStatement(sql); r'0IAJ-;
ps.setInt(1,xxx); tkX7yg>`
ps.setString(2,xxx); Y5?*=eM
... *"Yz"PK
ResultSet rs = ps.executeQuery(); // 查询 ,rj_P
int c = ps.executeUpdate(); // 更新 )d5Hv2/0
y|X</3w
3、处理执行结果 Z BjyQ4h
查询语句,返回记录集ResultSet 9eO!_a^
更新语句,返回数字,表示该更新影响的记录数 UJ0fYTeuI
ResultSet的方法 reseu*5
1、next(),将游标往后移动一行,如果成功返回true;否则返回false h&@A'om~
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 x}v]JEIf[Q
?#~3%$>
4、释放连接 1AMxZ (e
cn.close(); 9RA~#S|(T
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection uc;1{[5`1q
\GhL{Awv&a
可滚动、更新的记录集 0'8_:|5
1、创建可滚动、更新的Statement 4UwXrEQp
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); Age
该Statement取得的ResultSet就是可滚动的 XTboFrf
2、创建PreparedStatement时指定参数 E_sKD ybj
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); 7|Z=#3INw
ResultSet.absolute(9000); _+Tq&,_:o
批量更新 ^ [FK<9
1、Statement lh^-L+G:Ok
Statement sm = cn.createStatement(); L3}n(KAJj
sm.addBatch(sql1); M~%~y`D^
sm.addBatch(sql2); "<