java 数据库基本操作 {;;eOxOP|
1、java数据库操作基本流程 vnF g%M!
2、几个常用的重要技巧: i!y\WaCp
可滚动、更新的记录集 d^_itC;-,
批量更新 f0g6g!&gf
事务处理 @Z,qu2~|!
(OQi%/Oy
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 q>c+bo
6
1、取得数据库连接 kU>#1He
1)用DriverManager取数据库连接 k\%,xf; x
例子 yh4jRe?f
String className,url,uid,pwd; W|~q<},j
className = "oracle.jdbc.driver.OracleDriver"; Z!k5"\{0pE
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; ,&4zKm
uid = "system"; *SXSF95
pwd = "manager"; e$x4Ux7*"
Class.forName(className); 0yKwH\S
Connection cn = DriverManager.getConnection(url,uid,pwd); i{4'cdr?
2)用jndi(java的命名和目录服务)方式 '%3u%;"
例子 #Xj;f^}/
String jndi = "jdbc/db"; /S/tE
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); !+%Az*ik
DataSource ds = (DataSource) ctx.lookup(jndi); I"~xDa!
Connection cn = ds.getConnection(); +0SW ?#%
多用于jsp中 !;ZBL;qY9
2、执行sql语句 r$Yh)rpt:
1)用Statement来执行sql语句 NH<Y1t
String sql; ~ }Kp
Statement sm = cn.createStatement(); 0LZ=`tI
sm.executeQuery(sql); // 执行数据查询语句(select) [Aa[&RX+9
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); +q$xw}+PK
2)用PreparedStatement来执行sql语句 hw7~i
String sql; Cd$dnHVh
sql = "insert into user (id,name) values (?,?)"; P~n8EO1r
PreparedStatement ps = cn.prepareStatement(sql); *c!;^Qy p&
ps.setInt(1,xxx); aGdpecv
ps.setString(2,xxx); KC#kss
... J,.j_ii`!
ResultSet rs = ps.executeQuery(); // 查询 |qQ{ 8T%)
int c = ps.executeUpdate(); // 更新 ;,()wH
xNocGtS
3、处理执行结果 c&0;wgieg
查询语句,返回记录集ResultSet t*5z1T?
更新语句,返回数字,表示该更新影响的记录数 @G7w(>_T3
ResultSet的方法 QZ6[*_Z6
1、next(),将游标往后移动一行,如果成功返回true;否则返回false YLD-SS[/>
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 6yy|V~5
z%++\.g_
4、释放连接 X!7cz t
cn.close(); Qd9-u)L<
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection 6@*5!,
M9g~lKs'
可滚动、更新的记录集 cH+h=E=
1、创建可滚动、更新的Statement .G7]&5s
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); EY,;e\7O,
该Statement取得的ResultSet就是可滚动的 )w^GPlh
2、创建PreparedStatement时指定参数 TW'E99wG
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); e4[-rkn{hl
ResultSet.absolute(9000); {d&X/tT
批量更新 )er?*^9Z
1、Statement nNd`]F^U
Statement sm = cn.createStatement(); j;$6F/g
sm.addBatch(sql1); +9Xu"OFm
sm.addBatch(sql2); ey'pm\Z
... OHx,*}N
sm.executeBatch() /&S~+~]n
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 a!TBk=P
2、PreparedStatement } IIK~d,
PreparedStatement ps = cn.preparedStatement(sql); *%P>x}6w3
{ pCB
5wB
ps.setXXX(1,xxx); :w?:WH?2L
... 5bu[}mJ
ps.addBatch(); .5jnKU8NF
} i}v}K'`
ps.executeBatch(); $.suu^>^w
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 *u:;:W&5y
;:#?~%7>
事务的处理 oi33{#%t
1、关闭Connection的自动提交 b#?ai3E
cn.setAutoCommit(false); Nb|3?c_
2、执行一系列sql语句 X|lElN
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close +0oyt?
Statement sm ; R=#q"9qz
sm = cn.createStatement(insert into user...); .Um?5wG~i
sm.executeUpdate(); ~u O:tL
sm.close(); s0~05{
sm = cn.createStatement("insert into corp...); v^y}lT
sm.executeUpdate(); ,(;p(#F>
sm.close(); +cV5h
3、提交 yDu
yMt#
cn.commit(); >
{'5>6u
4、如果发生异常,那么回滚 #;qFPj- v
cn.rollback();