java 数据库基本操作 y KYP
1、java数据库操作基本流程 $\,BpZ
}3
2、几个常用的重要技巧: iJZ|[jEDV
可滚动、更新的记录集 b$goF
}b'g
批量更新
};"+ O
事务处理 'Uko^R)(
X<Th{kM2
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 T}t E/
1、取得数据库连接 o4/I1Mq
1)用DriverManager取数据库连接 z
_O,Y
例子 $W/+nmb)@K
String className,url,uid,pwd; ."IJmv
className = "oracle.jdbc.driver.OracleDriver"; ~3'RW0
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; z#{0;t
uid = "system"; 0;FqX*
pwd = "manager"; Gin_E&%g
Class.forName(className); q[)q|R|
Connection cn = DriverManager.getConnection(url,uid,pwd); f8LrDR
2)用jndi(java的命名和目录服务)方式 H}sS4[z
例子 hg?j)jl|
String jndi = "jdbc/db"; XVrm3aj(m
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); B?;' lDz*
DataSource ds = (DataSource) ctx.lookup(jndi); -Wlp=#9
Connection cn = ds.getConnection(); <Qcex3
多用于jsp中 )+n,5W
2、执行sql语句 QY~<~<d+G
1)用Statement来执行sql语句 U/X|i /
String sql; ePq13!FC/
Statement sm = cn.createStatement(); 15xd~V?ai:
sm.executeQuery(sql); // 执行数据查询语句(select) g5tjj.
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); Q e>i{:N
2)用PreparedStatement来执行sql语句 G`]v_`>
String sql; x)ddRq
l
sql = "insert into user (id,name) values (?,?)"; |*tWF!
D6`
PreparedStatement ps = cn.prepareStatement(sql); IpWy)B>Fl3
ps.setInt(1,xxx); $hjP}- oUX
ps.setString(2,xxx); t['k%c
... 'dIX=/RZ
ResultSet rs = ps.executeQuery(); // 查询 ;-KAUgL2
int c = ps.executeUpdate(); // 更新 >d8x<|D
PPoI>J
3、处理执行结果 G$;]
?g
查询语句,返回记录集ResultSet GOy=p3mQ
更新语句,返回数字,表示该更新影响的记录数 t."g\;
ResultSet的方法 c=A(o
1、next(),将游标往后移动一行,如果成功返回true;否则返回false 9Fy\t{ks
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 pg~zUOY
-?< Ww{
4、释放连接 hWD !
cn.close(); 7?=43bZl
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection U1,~bO9
hrs#ZZ:E
可滚动、更新的记录集 m~)Fr8Wh6
1、创建可滚动、更新的Statement M.ZEqV+k
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); V_&GYXx(J
该Statement取得的ResultSet就是可滚动的 .i {>Z
2、创建PreparedStatement时指定参数 P%zH>K
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); )7&42>t
ResultSet.absolute(9000); {&2$[g=[ ^
批量更新 uY^v"cw/F
1、Statement Sa3I?+
Statement sm = cn.createStatement(); B{7Kzwh;
sm.addBatch(sql1); 1. #
|QX
sm.addBatch(sql2); x9 &-(kBU
... ]\CU9J|H8
sm.executeBatch() yicO!:bM
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 )Y3EQxXa
2、PreparedStatement -O|&