java 数据库基本操作 T$+}Srb
1、java数据库操作基本流程 alq>|,\x
2、几个常用的重要技巧: Kr9 @
可滚动、更新的记录集 Q@M,:0+cy
批量更新 7qs[t7-h?
事务处理 D7=gUm>
r^]0LJ
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 OnD+/I
1、取得数据库连接 Z3I<
1)用DriverManager取数据库连接 GSMP)8W
例子 MRiETd"
String className,url,uid,pwd; :CV&WP
className = "oracle.jdbc.driver.OracleDriver"; 2Qn%p[#n
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; YWm:#{n.
uid = "system"; 9<xe%V=ki
pwd = "manager"; |vGz
1jLV
Class.forName(className); Ar>-xCTD
Connection cn = DriverManager.getConnection(url,uid,pwd); thkL<
2)用jndi(java的命名和目录服务)方式 (=7e~'DC
例子 }B"kJNxV
String jndi = "jdbc/db"; u<):gI
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); FzW(An&x2
DataSource ds = (DataSource) ctx.lookup(jndi); S c@g;+#QU
Connection cn = ds.getConnection(); f\Pd#$3
多用于jsp中 Bm^vKzp
2、执行sql语句 :^px1
1)用Statement来执行sql语句 YKj7~yK?
String sql; n|{x\@VeF
Statement sm = cn.createStatement(); PF4Cs3m/
sm.executeQuery(sql); // 执行数据查询语句(select) ;@Ls"+g
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); {-H6Z#b[
2)用PreparedStatement来执行sql语句 k~:B3p
String sql; MT a.Ubs
sql = "insert into user (id,name) values (?,?)"; }>SHTHVye
PreparedStatement ps = cn.prepareStatement(sql); ]W]Vkkg]
ps.setInt(1,xxx); c6Wy1d^
ps.setString(2,xxx); tZ4W]od
... $T~|@XH
ResultSet rs = ps.executeQuery(); // 查询 MX
qH
int c = ps.executeUpdate(); // 更新 Nqy',N
H<"{wUPT0
3、处理执行结果 kE/>Ys@w
查询语句,返回记录集ResultSet ]yA|
m3^2
更新语句,返回数字,表示该更新影响的记录数 [O9(sWL'
ResultSet的方法 L1M]ya!l
1、next(),将游标往后移动一行,如果成功返回true;否则返回false C$Ldz=d
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 = R; 0Ed&b
\O`B@!da~
4、释放连接 /1t(e._
cn.close(); .-fJ\`^mi
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection '^n2]<
&QLCij5:
可滚动、更新的记录集 J?u",a]|H"
1、创建可滚动、更新的Statement wvsTP32]
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); _qM'm^z5
该Statement取得的ResultSet就是可滚动的 ME{i-E4
2、创建PreparedStatement时指定参数 |$^,e%bE
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); lB.P
ResultSet.absolute(9000); lzw3 x
批量更新 wE;??'O'l
1、Statement
E~jNUTq
Statement sm = cn.createStatement(); ct fKxGH
sm.addBatch(sql1); !uy?]l
sm.addBatch(sql2); 5fSDdaO
... )%f]`<