java 数据库基本操作 R?Zv
1、java数据库操作基本流程 :@#9P,"
2、几个常用的重要技巧: ea[vzD]
可滚动、更新的记录集 -d5b,leC^
批量更新 p)v|t/7
事务处理 pW$ZcnU
Ey96XJV
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 F|pM$Kd`
1、取得数据库连接 ~A^E_
1)用DriverManager取数据库连接 Yw @)0%G
例子 qg1s]c~0u
String className,url,uid,pwd; Y1fcp_]m
className = "oracle.jdbc.driver.OracleDriver"; 3'tcEFkH
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; _#32hAI
uid = "system"; nMm4fns
pwd = "manager"; VZuluV
Class.forName(className); !*Ex}K99
Connection cn = DriverManager.getConnection(url,uid,pwd); E| eEAa
2)用jndi(java的命名和目录服务)方式 San3^uX
例子 QL/I/EgqC
String jndi = "jdbc/db"; <8;SSdoKi
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); S;@nPzhc
DataSource ds = (DataSource) ctx.lookup(jndi); vDI$
QUMD6
Connection cn = ds.getConnection(); t7GK\B8:
多用于jsp中 BwOIdz%]OY
2、执行sql语句 1.Kun !w
1)用Statement来执行sql语句 ?-M?{De
String sql; )1?#q[x
Statement sm = cn.createStatement(); J]G]
<)
sm.executeQuery(sql); // 执行数据查询语句(select) I<E~=
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); ;IyA"C(i
2)用PreparedStatement来执行sql语句 En!X}Owh
String sql; }@6Tcn1
sql = "insert into user (id,name) values (?,?)"; D!7-(3R
PreparedStatement ps = cn.prepareStatement(sql); 6[+@#IWx
ps.setInt(1,xxx); s1
mKz0q
ps.setString(2,xxx); ((0nJJjz
... 0b=1Ce+0q
ResultSet rs = ps.executeQuery(); // 查询 (U@Ks )
int c = ps.executeUpdate(); // 更新 _EPfeh;
9r2l~zE
3、处理执行结果 RvQa&r5l
查询语句,返回记录集ResultSet @vyq?H$U;N
更新语句,返回数字,表示该更新影响的记录数 Y oDL/
ResultSet的方法 ri.}G
1、next(),将游标往后移动一行,如果成功返回true;否则返回false phCItN;
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 aF8'^xF
B|WM;Y^
4、释放连接 H@,h$$
cn.close(); ^mwS6WH6
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection pW&K=,7|
Q Ev7k
可滚动、更新的记录集 $'*q]]
1、创建可滚动、更新的Statement B^;"<2b*
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); U80h0t%
该Statement取得的ResultSet就是可滚动的 `:b*#@
2、创建PreparedStatement时指定参数 vJ,r}$H3
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); 8MQb5( !
ResultSet.absolute(9000); I9
(6
批量更新 WwDd62g
1、Statement @T.+:U@S
Statement sm = cn.createStatement(); XXDLbT'J
sm.addBatch(sql1); XrUc`
sm.addBatch(sql2); HQkK8'\LP
... nh
XVc((
sm.executeBatch() 7q%xF#mK=
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 'G>$W+lT^
2、PreparedStatement i0}f@pCB?X
PreparedStatement ps = cn.preparedStatement(sql); E.N@qMn~
{ Oa.84a
ps.setXXX(1,xxx); VW`SqUl
... = Ed0vw
ps.addBatch(); X 0vcBHh
} ;yu#Bs
ps.executeBatch(); J7;8
S
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 <uG6!P
5Z@0XI
事务的处理 }3O 0nab
1、关闭Connection的自动提交 qdnwaJ;&
cn.setAutoCommit(false); &J?:wC=E
2、执行一系列sql语句 2A=q{7s
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close ]?G|:Kx$y%
Statement sm ; r'(*#
sm = cn.createStatement(insert into user...); V O\g"Yc
sm.executeUpdate(); c_4K
sm.close(); rnyXMt.q
sm = cn.createStatement("insert into corp...); do.AesdXaq
sm.executeUpdate(); FUVp}>#U
sm.close(); "5HSCl$r%
3、提交 oRZ98?Y\B
cn.commit(); "wy2u~
4、如果发生异常,那么回滚 vnN0o5
cn.rollback();