java 数据库基本操作 cFie;k
1、java数据库操作基本流程 G[e,7jev
2、几个常用的重要技巧: @[joM*U
可滚动、更新的记录集 *CGHp8
批量更新 '`k
事务处理 uxdB}H,
ThP~k9-
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 -J!n 7
1、取得数据库连接 lq-F*r\/~+
1)用DriverManager取数据库连接 :*g$@T
例子 Ho}*Bn~ic
String className,url,uid,pwd; wL3BgCxqDL
className = "oracle.jdbc.driver.OracleDriver"; 2.JrLBhN
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; 8~qpOQX^V
uid = "system"; [Cd#<Te3
pwd = "manager"; A'![*O
Class.forName(className); mx1Bk9h%Xe
Connection cn = DriverManager.getConnection(url,uid,pwd); f-^*p
2)用jndi(java的命名和目录服务)方式 u`B/ 9-K)y
例子 1xtS$^APcd
String jndi = "jdbc/db"; j/O9LygB
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); !M }-N
DataSource ds = (DataSource) ctx.lookup(jndi); M`#g>~bI#R
Connection cn = ds.getConnection(); g<~ODMCO?W
多用于jsp中 x$Wtkb0<
2、执行sql语句 lpd~U 2&
1)用Statement来执行sql语句 ~Gc@#Msj
String sql; }x{1{Bw>Y
Statement sm = cn.createStatement(); 6}@T^?
sm.executeQuery(sql); // 执行数据查询语句(select) I|bX;l
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); r.@UH-2c
2)用PreparedStatement来执行sql语句 VwBw!,%Ab
String sql; >yenuqIKQv
sql = "insert into user (id,name) values (?,?)"; ;E{@)X..|
PreparedStatement ps = cn.prepareStatement(sql); LkafB2y
ps.setInt(1,xxx); FME,W&_d
ps.setString(2,xxx); CXu$0DQ(
... ~y Dl& S
ResultSet rs = ps.executeQuery(); // 查询 2fayQY
xD
int c = ps.executeUpdate(); // 更新 = ?/6hB=7<
\Rt>U|%
3、处理执行结果 U1yspHiZ
查询语句,返回记录集ResultSet "a _S7K
更新语句,返回数字,表示该更新影响的记录数 (.z0.0W
ResultSet的方法 [N*S5^>1
1、next(),将游标往后移动一行,如果成功返回true;否则返回false B}y#AVSA
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 1*#hIuoj'
d]_].D$
4、释放连接 lZ"C~B}9:I
cn.close(); V#4ox km
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection p&xj7qwp@F
1_xkGc-z<
可滚动、更新的记录集 ^}gZ+!kA
1、创建可滚动、更新的Statement ,
P1m#
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); RU.MJ
kYQ5
该Statement取得的ResultSet就是可滚动的 lS2`#l >
2、创建PreparedStatement时指定参数 Vw.4;Zy(
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); J1r\Cp+h0
ResultSet.absolute(9000); ls "Z4v(L6
批量更新 8BY`~TZO$q
1、Statement EN>a^B+!
Statement sm = cn.createStatement(); T/%k1Hsa4H
sm.addBatch(sql1); ]]u_Mdk
sm.addBatch(sql2); k9y/.Mu
... w(Mi?
sm.executeBatch() /byF:iYI
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 L'a s^Od
2、PreparedStatement B( wi+;
PreparedStatement ps = cn.preparedStatement(sql); &`"uKO]
{ -&y&b-
ps.setXXX(1,xxx); :W'.SRD
... c!$~_?]
ps.addBatch(); >G0ihhVt
} Me+)2S 9
ps.executeBatch(); ? a?]
LIE8
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 Ko0T[TNkh
NUi&x