java 数据库基本操作 gMq;
1、java数据库操作基本流程 rk,64(
2、几个常用的重要技巧: d/3&3>/
可滚动、更新的记录集 \!uf*=d
批量更新 )PU\|I0|)e
事务处理 gGA5xkA
6rG7/
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 U:MZN[Cc[
1、取得数据库连接 TQ/#
1)用DriverManager取数据库连接 #q0xlF@
例子 =8p[ (<F=
String className,url,uid,pwd; jamai8
className = "oracle.jdbc.driver.OracleDriver"; rc%*g3ryLG
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; u|EJ)dT?
uid = "system"; E6G;fPd= E
pwd = "manager"; ]>sMu]biH
Class.forName(className); Sqmjf@o$>
Connection cn = DriverManager.getConnection(url,uid,pwd); Y%]g,mG
2)用jndi(java的命名和目录服务)方式 93w$ck},?G
例子 e*Nm[*@UW
String jndi = "jdbc/db"; MfLus40;n
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); ^( C,LVP<
DataSource ds = (DataSource) ctx.lookup(jndi); EOqV5$+
Connection cn = ds.getConnection();
ji ,`?
多用于jsp中 M5`m5qc3
2、执行sql语句 /n,a0U/
1)用Statement来执行sql语句 6w{""K.{
String sql; 3+U2oI:I
Statement sm = cn.createStatement(); X88I|Z'HIh
sm.executeQuery(sql); // 执行数据查询语句(select) 5/m*Lc+r
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); Ai)Q(]
2)用PreparedStatement来执行sql语句 cx)x="c
String sql; N;m62N
sql = "insert into user (id,name) values (?,?)"; +`m0i1uI3
PreparedStatement ps = cn.prepareStatement(sql); .:;q8FL/
ps.setInt(1,xxx); !a'{gw
ps.setString(2,xxx); \4*i;a.kU
... ke +\Z>BWN
ResultSet rs = ps.executeQuery(); // 查询 b%X}{/ n
int c = ps.executeUpdate(); // 更新 S |@
Y !
`wLmGv+V
3、处理执行结果 =E~SaT
查询语句,返回记录集ResultSet D{[i_K
更新语句,返回数字,表示该更新影响的记录数 Pc~)4>X<
ResultSet的方法 ;]/cCi
1、next(),将游标往后移动一行,如果成功返回true;否则返回false JvW!w)$pY
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 ,Qe`(vU*s
)GC[xo4bg
4、释放连接 aO\@5i_r
cn.close(); dUceZmAl
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection Gh'{O/F4*
:J5CmU$
可滚动、更新的记录集 wLQM]$O
1、创建可滚动、更新的Statement *;.:UR[i
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); `5~<)
该Statement取得的ResultSet就是可滚动的 /dVcNo3"
2、创建PreparedStatement时指定参数 D%'rq
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); n^epC>a" b
ResultSet.absolute(9000); (G"/C7q
批量更新 [vCZD8"Y8
1、Statement U:IeMf-;
Statement sm = cn.createStatement(); I)G.tJZ
e
sm.addBatch(sql1); 3_ =:^Z
sm.addBatch(sql2); +n 8,=}
... ,76nDXy`
sm.executeBatch() cC,gd\}M
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 yLt?XhRlp
2、PreparedStatement 9>5]y}.{
PreparedStatement ps = cn.preparedStatement(sql); E|B1h!!\c
{ 'BEM:1)
ps.setXXX(1,xxx); YjG:ECj}
... UFa 00t^5
ps.addBatch(); :OY7y`hRG
} Dw2$#d
ps.executeBatch(); n] n3/wpO
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 Yg`z4U'6~
iJu$&