java 数据库基本操作 SCTA=l.
1、java数据库操作基本流程 2@
Z(P.Gh
2、几个常用的重要技巧: ."Y
e\>k
可滚动、更新的记录集 AQ='|%
批量更新 \Acqr@D
事务处理 Pfs;0}h5
BGfzslK
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 L{c q, jk
1、取得数据库连接 FLY
Ca
1)用DriverManager取数据库连接 ,`aq+K
例子 FKmFo^^0
String className,url,uid,pwd; Sr?#S
className = "oracle.jdbc.driver.OracleDriver"; LlSZr)X
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; `[n("7,
uid = "system"; %$DI^yS
pwd = "manager"; =yy5D$\
Class.forName(className); uyY|v$FM
Connection cn = DriverManager.getConnection(url,uid,pwd); &@3H%DP}Ql
2)用jndi(java的命名和目录服务)方式 |p-t%xDdr
例子 C/-63O_
String jndi = "jdbc/db"; vEn4L0D
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); M4W5f#C5Ee
DataSource ds = (DataSource) ctx.lookup(jndi); Rx+p.
Connection cn = ds.getConnection(); k]I0o)+O.
多用于jsp中 ,f&5pw
=
2、执行sql语句 [2Ud]l:6E
1)用Statement来执行sql语句 ;{[.Zu
String sql; -(b kr+N
Statement sm = cn.createStatement(); <Z/x,-^*<
sm.executeQuery(sql); // 执行数据查询语句(select) r4#o+qE
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); Ggb5K8D*
2)用PreparedStatement来执行sql语句 yR\btx|e5~
String sql; zi3\63D3eO
sql = "insert into user (id,name) values (?,?)"; Kx%Sku<F'
PreparedStatement ps = cn.prepareStatement(sql); 2j&AiD
ps.setInt(1,xxx); x_dy~(*
ps.setString(2,xxx); Nj 00W1
... (V HL{rj
ResultSet rs = ps.executeQuery(); // 查询 >orK';r<
int c = ps.executeUpdate(); // 更新 ]i)j3WDz]
H_QsNf
3、处理执行结果 P$-X)c$&
查询语句,返回记录集ResultSet @n": w2^B
更新语句,返回数字,表示该更新影响的记录数 "T- `$'9
ResultSet的方法 X<*U.=r)
1、next(),将游标往后移动一行,如果成功返回true;否则返回false Alxx[l\<J
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 _:VB}>
:*2ud (
4、释放连接 (!zy{;g|
cn.close(); @W9x$
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection IOV(seEY
]S5JUAGkE*
可滚动、更新的记录集 icgSe:Ci
1、创建可滚动、更新的Statement FJ6u.u
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); }:~x7|~s:
该Statement取得的ResultSet就是可滚动的 L:'J
Bhg
2、创建PreparedStatement时指定参数 yiA<,!;4P
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); _:"<[ >9
ResultSet.absolute(9000); ,xx R\}
批量更新 9\DQ>V TQ
1、Statement eh5gjSqx
Statement sm = cn.createStatement(); 0p\@!Z H
sm.addBatch(sql1); I2nhqJy^
sm.addBatch(sql2); W!&vul5
... qC?:*CXH
sm.executeBatch() b 'pOJS
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 GF^071]G
2、PreparedStatement 6}oXP_0U
PreparedStatement ps = cn.preparedStatement(sql); ,9o"43D:a|
{ dB5b@9*
ps.setXXX(1,xxx); ok4@N @
... 1{r)L{]
ps.addBatch(); RSfzRnhmr
} ^!by3Elqqk
ps.executeBatch(); {7/0< NG
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 Zc`BiLzrIG
|UxG $M(
事务的处理 `WH"%V:"Q
1、关闭Connection的自动提交 8zR~d%pK
cn.setAutoCommit(false); k'5?M
2、执行一系列sql语句 ksN+?E4w
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close UQI]>#_/v
Statement sm ; WpRc)g:
sm = cn.createStatement(insert into user...); PuZf/um
sm.executeUpdate(); 6<ZkJ:=
sm.close(); o$Z6zm xO
sm = cn.createStatement("insert into corp...); O~^"
sm.executeUpdate(); Os1>kwC
sm.close(); n0e1k.A
3、提交 *NCl fkZ
cn.commit(); 9& 83n(m
4、如果发生异常,那么回滚 6 jn3`D
cn.rollback();