java 数据库基本操作 2H_|Attoi
1、java数据库操作基本流程 NIeT.!
2、几个常用的重要技巧: sB
]~=vUP
可滚动、更新的记录集 1vBR\!d?7
批量更新 eOjoxnD-$
事务处理 R:98'`X=
D[m;rcl
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 Ns2M8
1、取得数据库连接 >&tPIrz
1)用DriverManager取数据库连接 &'4id[$9
例子 5YaTE<G
String className,url,uid,pwd; -:`$8/A|
className = "oracle.jdbc.driver.OracleDriver"; A^2VH$j]+
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; "W;GvI
uid = "system"; U[=VW0
pwd = "manager"; _h!OGLec
Class.forName(className); /c~z(wv
Connection cn = DriverManager.getConnection(url,uid,pwd); ]'=]=o~4
2)用jndi(java的命名和目录服务)方式 *,~d!Fc
例子 S1&mY'c
String jndi = "jdbc/db"; _6&x$*O
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); ozF>2`K
}
DataSource ds = (DataSource) ctx.lookup(jndi);
2&O!<C j
Connection cn = ds.getConnection(); &a% |L=FY
多用于jsp中 @Hj5ZJ
3
2、执行sql语句 1+RG@Cp
1)用Statement来执行sql语句 m5SJB]a/
String sql; 7.$0LN/a!Z
Statement sm = cn.createStatement(); pw*<tXH!
sm.executeQuery(sql); // 执行数据查询语句(select) V} Y %9V
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); `3^*K/K\
2)用PreparedStatement来执行sql语句 u?Jw) `
String sql; n1`D:XrE
sql = "insert into user (id,name) values (?,?)"; '5.n28W>
PreparedStatement ps = cn.prepareStatement(sql); QWv+Ja
ps.setInt(1,xxx); i
~fkjn
ps.setString(2,xxx); ('pNAn!]
... ~isrE;N1|
ResultSet rs = ps.executeQuery(); // 查询 k/YEUC5
int c = ps.executeUpdate(); // 更新 T>s~bIzL*e
tvynl;Y/
3、处理执行结果 b[Sd$ACd
查询语句,返回记录集ResultSet j2SJ4tB /
更新语句,返回数字,表示该更新影响的记录数 * F%Wf
ResultSet的方法 EV|
6._Z(D
1、next(),将游标往后移动一行,如果成功返回true;否则返回false cdfJa
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 Mib(J+Il
%mPIr4$Pg
4、释放连接 '9%72yG
cn.close(); R)d1]k8
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection , j^ /~
"S.5_@?
可滚动、更新的记录集 | ?3\xw
1、创建可滚动、更新的Statement Mfe/(tlI
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); Ehu^_HZ
该Statement取得的ResultSet就是可滚动的 nIJ2*QJ
2、创建PreparedStatement时指定参数 bB@1tp0+
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); :}}5TJ wG
ResultSet.absolute(9000); `P<}MeJ\l
批量更新 sL|*0,#K
1、Statement 7N,E%$QL
Statement sm = cn.createStatement(); B)g7MG
sm.addBatch(sql1); js)M
c*]&
sm.addBatch(sql2); %719h>$
... -jdS8n4
sm.executeBatch() L\}o(P(
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 |uId:^{
2、PreparedStatement _Q,`Qn@|BD
PreparedStatement ps = cn.preparedStatement(sql); fqA\Rp6Z
{ j'FSd*5m
ps.setXXX(1,xxx); Aq%TZ_m
... rk:^^r>5Qi
ps.addBatch(); XQ]no aU
} &^Q-:Kxs8
ps.executeBatch(); >%5Ld`c:SD
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 @ofivCc<%
.6aC2A]es
事务的处理 &?flH;
1、关闭Connection的自动提交 3ha^NjE
cn.setAutoCommit(false); kx0(v1y3gT
2、执行一系列sql语句 reJw&t