java 数据库基本操作 gp< =Gmd
1、java数据库操作基本流程 vahoSc;sw
2、几个常用的重要技巧: EO"C8z'al
可滚动、更新的记录集 hCc0sRp
批量更新 lxb 8xY
事务处理 /NBTvTI
D$Kea
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 H/cTJ9zz
1、取得数据库连接 h_
!>yK
1)用DriverManager取数据库连接 Q .RO
例子 jMpa?Jp 1
String className,url,uid,pwd; :\}U9QfCw
className = "oracle.jdbc.driver.OracleDriver"; #1Z7R/
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; -l*A
uid = "system"; \aSz2lxEHn
pwd = "manager"; ZCiY,;c
Class.forName(className); oK Kz 4
Connection cn = DriverManager.getConnection(url,uid,pwd); )+~E8yK
2)用jndi(java的命名和目录服务)方式 9Vh_[^bR
例子 .)PqN s:
String jndi = "jdbc/db"; Gbb\h
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); snMQ"ju
DataSource ds = (DataSource) ctx.lookup(jndi); fGu!M9qN4
Connection cn = ds.getConnection(); #\FT EY!
多用于jsp中 E 5kF^P
2、执行sql语句 _PB@kH#
1)用Statement来执行sql语句 pC^[ [5A
String sql; Cd~LsdKE5
Statement sm = cn.createStatement(); v}`1)BUeF
sm.executeQuery(sql); // 执行数据查询语句(select) 9m!7|(QV
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); |cTpw1%I~
2)用PreparedStatement来执行sql语句 '
iQ9hQjD
String sql; _X%Dw
sql = "insert into user (id,name) values (?,?)"; yq*JdTF
PreparedStatement ps = cn.prepareStatement(sql); fi=?n{e'
ps.setInt(1,xxx); H-&3}
ps.setString(2,xxx); zl)&U=4l
... YN#XmX%
ResultSet rs = ps.executeQuery(); // 查询 :WX0,-Gn
int c = ps.executeUpdate(); // 更新 !C`20,U
+i)AS0?d
3、处理执行结果 $%He$t
查询语句,返回记录集ResultSet YBylyVZ
更新语句,返回数字,表示该更新影响的记录数 ^
KAG|r9
ResultSet的方法 (+MC<J/i
1、next(),将游标往后移动一行,如果成功返回true;否则返回false FzhT$7Gw
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 iG-N
BED@?:U# h
4、释放连接 ?aJ6ug
cn.close(); xwLy|&
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection IK?]PmN4}
5c;En6W
可滚动、更新的记录集 AN10U;p/O
1、创建可滚动、更新的Statement Mo|yv[(K,
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); jsWX 6(=
该Statement取得的ResultSet就是可滚动的 YN^jm
2、创建PreparedStatement时指定参数
TcZN%
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); d pn3 (
ResultSet.absolute(9000); "^"'uO$
批量更新 csvOg[
1、Statement 1ZNNsB
Statement sm = cn.createStatement(); E\!n49
sm.addBatch(sql1); !3x*k;0
sm.addBatch(sql2); +S0u=u65
... ,>w}xWSYpG
sm.executeBatch() pzSqbgfrQ
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 + (=I8s/
2、PreparedStatement %BICt @E
PreparedStatement ps = cn.preparedStatement(sql); h#O"Q+J9n
{ )k~1,
ps.setXXX(1,xxx); 1PIzV:L\
... '>]&r