java 数据库基本操作 9rXbv4{
1、java数据库操作基本流程 7jvy]5y8&~
2、几个常用的重要技巧: GslUN% UJr
可滚动、更新的记录集 HDQhXw!!hc
批量更新 T'\B17
:*
事务处理 !OWPwBm;
'F%4[3a$\n
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 Z|;<:RKWY
1、取得数据库连接 #p&&w1
1)用DriverManager取数据库连接 !Ic;;<
例子 4;"^1 $
String className,url,uid,pwd; r_C|gfIP
className = "oracle.jdbc.driver.OracleDriver"; 0\v98g<[+
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; )006\W|t9
uid = "system"; 1Vq]4_09g1
pwd = "manager"; lOIBX@K E
Class.forName(className); mr:;Wwd
Connection cn = DriverManager.getConnection(url,uid,pwd); Yhdt"@;..
2)用jndi(java的命名和目录服务)方式 1HQh%dZZ
例子 ?#8',:
String jndi = "jdbc/db"; r~cmrLQa
Context ctx = (Context) new InitialContext().lookup("java:comp/env");
Y g>W.wA
DataSource ds = (DataSource) ctx.lookup(jndi); ZeewGa^r
Connection cn = ds.getConnection(); $YZsaw
多用于jsp中 KHwzQ<Z3
2、执行sql语句 U'^AJ2L8
1)用Statement来执行sql语句 +5J "G/f
String sql; 'J^ M`/
Statement sm = cn.createStatement(); bwh7.lDAl
sm.executeQuery(sql); // 执行数据查询语句(select) kN3 T/96
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); tP; &$y.8
2)用PreparedStatement来执行sql语句 )|;*[S4
String sql; `nBCCz'Y!
sql = "insert into user (id,name) values (?,?)"; nQ|4.e;
PreparedStatement ps = cn.prepareStatement(sql); FR~YO|4?
ps.setInt(1,xxx); ?^Sk17G
ps.setString(2,xxx); WrK!]17or
... rZRcy9$y>
ResultSet rs = ps.executeQuery(); // 查询 eXJt9olI
int c = ps.executeUpdate(); // 更新 >!+.M9
xlPUum-o
3、处理执行结果 TDI8L\rr
查询语句,返回记录集ResultSet wMy$T<:
更新语句,返回数字,表示该更新影响的记录数 m"Y;GzqQl
ResultSet的方法 .C^1.)
1、next(),将游标往后移动一行,如果成功返回true;否则返回false &`>[4D*
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 kPwgayz
7#n<d879e%
4、释放连接 oI=7X*B9
cn.close(); <S~_|Y*v
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection IOA"O9;
p.KX[I
可滚动、更新的记录集 9hAS#|vK
1、创建可滚动、更新的Statement mv@cGdxu
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); KTn,}7vZ
该Statement取得的ResultSet就是可滚动的 8
v NgePn
2、创建PreparedStatement时指定参数 gfQ&U@N
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); *8}Y0V\s
ResultSet.absolute(9000); =4GJYhj
批量更新 (]wi^dE
1、Statement }.Eq_wP<
Statement sm = cn.createStatement(); WqN=D5
sm.addBatch(sql1); \m-fLX
sm.addBatch(sql2); ~~:w^(s9
... j,Sg?&"%=
sm.executeBatch() [c4.E"
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 :V2"<]
2、PreparedStatement `-zdjc d
PreparedStatement ps = cn.preparedStatement(sql); *]2LN$
{ xt]Z{:.
ps.setXXX(1,xxx); SQ#6~zxl
... \8\)5#?
ps.addBatch(); f.V;Hl,
} MWf ]U
ps.executeBatch(); V~LZ%NZ8
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 YArNJ5z=
1|Y(XB^os(
事务的处理 8f>=.O*)
1、关闭Connection的自动提交 }qfr&Ffh@
cn.setAutoCommit(false); 8Ml&lfn_8
2、执行一系列sql语句 'Z2:u!E
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close r})2-3ZA9
Statement sm ; gA
]7YHc
sm = cn.createStatement(insert into user...); =jD[A>3I
sm.executeUpdate(); RAR0LKGX
sm.close(); 3oX%tx
sm = cn.createStatement("insert into corp...); 4X7y}F.J
sm.executeUpdate(); Wz$%o'OnC
sm.close(); @k~?h=o\b
3、提交 ToNi<~
cn.commit(); 8?] :>
4、如果发生异常,那么回滚
'$Jt}O
cn.rollback();