java 数据库基本操作 SO=gG 2E
1、java数据库操作基本流程 pM?~AYWb
2、几个常用的重要技巧: b^VRpv
可滚动、更新的记录集 nwU],{(Hgr
批量更新 |Dn Zk3M,
事务处理 ZC N}iQu4
]~aj
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 1ysfpX{=
1、取得数据库连接 5c` ;~
1)用DriverManager取数据库连接 AH#mL
例子 %):_
String className,url,uid,pwd; $6a9<&LP_
className = "oracle.jdbc.driver.OracleDriver"; Gr\ ]6
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; A?H#bRAs
uid = "system"; 1zPS#K/3
pwd = "manager"; XM`GK>*aC(
Class.forName(className); xoKK{&J
Connection cn = DriverManager.getConnection(url,uid,pwd); @G"nkB
2)用jndi(java的命名和目录服务)方式 m$p}cok#+S
例子 _y~6b{T
String jndi = "jdbc/db"; >qo!#vJc
a
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); pUHgjwT'U
DataSource ds = (DataSource) ctx.lookup(jndi); N1Vj;-
Connection cn = ds.getConnection(); A0<g8pv
多用于jsp中
$@L;j
2、执行sql语句 Voo'ZeZa
1)用Statement来执行sql语句 nQ\` ]_C
String sql; SZF 8InyF
Statement sm = cn.createStatement(); ^2~ZOP$A
sm.executeQuery(sql); // 执行数据查询语句(select) pAOKy
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); 8"j $=T6;W
2)用PreparedStatement来执行sql语句 c["1t1G
String sql; 6Qkjr</
sql = "insert into user (id,name) values (?,?)"; ,`bW(V
PreparedStatement ps = cn.prepareStatement(sql); pG#tMec
ps.setInt(1,xxx); _LHbP=B
ps.setString(2,xxx); p(n0(}eVC'
... ~6f/jCluR%
ResultSet rs = ps.executeQuery(); // 查询 vwT1bw .
int c = ps.executeUpdate(); // 更新 J@2jx4
5p#0K@`n/
3、处理执行结果 ESCN/ocV
查询语句,返回记录集ResultSet K,g6y#1"
更新语句,返回数字,表示该更新影响的记录数 rWTaCU^qV
ResultSet的方法 :qdyCsn2
1、next(),将游标往后移动一行,如果成功返回true;否则返回false VW*%q0i-
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 2 nyK'k
G<?RH"RZr
4、释放连接 peVY2\1>R
cn.close(); cg8/v:B
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection ';3>rv_
=`3r'c
可滚动、更新的记录集 a fa\6]m
1、创建可滚动、更新的Statement PaaMh[OmG
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); @&m [w'tn
该Statement取得的ResultSet就是可滚动的 |KhpF1/(
2、创建PreparedStatement时指定参数 {'{}@CuA2
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); mW"e
ResultSet.absolute(9000); !0l|[c4 e>
批量更新 jA1S|gV
1、Statement xRWfZ3E#
Statement sm = cn.createStatement(); oDZZ
sm.addBatch(sql1); \^(#b,k#
sm.addBatch(sql2); }rJqMZ]w
... E!Q@AZ
sm.executeBatch() BbX$R`f
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 -9om,U`t
2、PreparedStatement R|RGoGE6g
PreparedStatement ps = cn.preparedStatement(sql); MGF!ZZ\
{ ? X8`+`nh
ps.setXXX(1,xxx); a?y ucA
... x<l 5wh
ps.addBatch(); WfO E I1
} z -?\b^
ps.executeBatch(); (csk
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 U<=TAWZ@
gv eGBi
事务的处理 |B(,53
1、关闭Connection的自动提交 791v>h
cn.setAutoCommit(false); Q,.dIPla
2、执行一系列sql语句 dcrvEc_/
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close =#2%[kG q
Statement sm ; lz`\Q6rZ
sm = cn.createStatement(insert into user...); &- p(3$jn7
sm.executeUpdate(); ~~{lIO)&