java 数据库基本操作 bdUe,2Yi n
1、java数据库操作基本流程 .+ w#n<
2、几个常用的重要技巧: 3RyB 0
n
可滚动、更新的记录集 A/zZ%h
批量更新 Rt^~db
事务处理 @1UC9}>
/)Pf ]
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 e0ea2
2
1、取得数据库连接 7"c^$fj
1)用DriverManager取数据库连接 N @24)g?
例子 z[q#Dw
String className,url,uid,pwd; 'nO%1BZj+
className = "oracle.jdbc.driver.OracleDriver"; [h
GS*
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; mrgieb%
uid = "system"; KkJK5dZo
pwd = "manager"; "`jey)&H*M
Class.forName(className); Z+*t=?L,,G
Connection cn = DriverManager.getConnection(url,uid,pwd); _Bp{~-fO
2)用jndi(java的命名和目录服务)方式 XpH]CF
例子 =I}8-AS~V
String jndi = "jdbc/db"; Bi'qy]%
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); _RHB ^y;-
DataSource ds = (DataSource) ctx.lookup(jndi); ~rWys=
Connection cn = ds.getConnection(); M'
d ,TV[
多用于jsp中 pSvqGJU3
2、执行sql语句 vl{G;[6
1)用Statement来执行sql语句 ?!4xtOA
String sql; pW>?%ft.
Statement sm = cn.createStatement(); cR0OJ'w
sm.executeQuery(sql); // 执行数据查询语句(select) *)6:yn
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); O~1vX9
2)用PreparedStatement来执行sql语句 ).BZPyV<
String sql; ~$O.KF:
sql = "insert into user (id,name) values (?,?)"; l".LtUf-
PreparedStatement ps = cn.prepareStatement(sql); 2!u4nxZ.
ps.setInt(1,xxx); wInJ!1
ps.setString(2,xxx); ?IWLH-fkP
... 2tq~NA\#t
ResultSet rs = ps.executeQuery(); // 查询 d0Jaa1b~O
int c = ps.executeUpdate(); // 更新 SGuLL+|W#8
*C(/2
3、处理执行结果 cM= ?{W7~
查询语句,返回记录集ResultSet |NsrO8H
更新语句,返回数字,表示该更新影响的记录数 |@a.dgz,
ResultSet的方法 /i${ [1
1、next(),将游标往后移动一行,如果成功返回true;否则返回false ;E"TOC
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 tocZO
y$f{P:!"{3
4、释放连接 d1"%sI
cn.close(); 3j]P\T
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection eB$S d
a=m7pe^
可滚动、更新的记录集 0\N n.x%
1、创建可滚动、更新的Statement TbY<(wrMZ
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); ac-R q.GQY
该Statement取得的ResultSet就是可滚动的 Vh WF(*
2、创建PreparedStatement时指定参数 5V|D%t2N
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); <)vjoRv
ResultSet.absolute(9000); Z;nbnRz
批量更新 'DB4po.
1、Statement Xlw8>.\
Statement sm = cn.createStatement(); UY)e6 Zd
sm.addBatch(sql1); 9&>)4HNd?
sm.addBatch(sql2); ^,?dk![1Cv
... uEK9
sm.executeBatch() eq|G\XJ
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 }3"FQ/6C
2、PreparedStatement >8pmClVvmR
PreparedStatement ps = cn.preparedStatement(sql); $<y10DfO
{ zPC&p{S>
ps.setXXX(1,xxx); ranLHm.nB
... X/5\L.g2
ps.addBatch(); Z`?Z1SBt
} &_