jdbc 可更新结果集
2012-07-19 11:06
387 查看
jdbc中ResultSet在jdk 5.0以后默认都是可滚动的,不可更新的。可滚动的意思是我们可以调用absolute(),previous(), first()等操作来更新结果集中的指针位置。
当我们需要结果集可更新的时候,可以设置它的值为ResultSet.CONCUR_UPDATABLE,默认是ResultSet.CONCUR_READ_ONLY。
当我们在连接的是oracle数据库时,如果查询的sql语句是select * from 表名的话,那么oracle默认我们是以只读方式访问表,所以我们程序设置为可更新的结果集,也是没有任何用处的,需要select 字段名..... from 表名,才能调用可更新的结果集。
下面我们演示 更新结果集的操作,把表的sname列,更新为“姓名”+i。
package com.shizhan.main;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.shizhan.util.DatabaseUtil;
public class TestResult {
/**
* @param args
*/
public static void main(String[] args) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
//当操作oracle数据库的时候,如果设置结果集是可更新的,则sql语句设置为select *from 表名,是无法更新的,需要设置select
//字段1,字段2.。。from表名
String sql ="select sno,sname from student";
try {
conn = DatabaseUtil.getConnection();
//ResultSet.TYPE_SCROLL_INSENSITIVE结果集可滚动
//ResultSet.CONCUR_UPDATABLE结果集可更新
ps = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);
rs = ps.executeQuery();
//指针移动到最后
rs.last();
//返回当前的行号
int rownum = rs.getRow();
for(int i=rownum;i>0;i--)
{
//指针移动到第i条记录
rs.absolute(i);
System.out.println("sno:"+rs.getInt(1)
+"\t"+"sname"+rs.getString(2));
//修改第二列的值
rs.updateString(2,"姓名"+i);
//提交修改,更新列
rs.updateRow();
}
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}finally{
DatabaseUtil.close(rs);
DatabaseUtil.close(ps);
DatabaseUtil.close(conn);
}
}
}
当我们需要结果集可更新的时候,可以设置它的值为ResultSet.CONCUR_UPDATABLE,默认是ResultSet.CONCUR_READ_ONLY。
当我们在连接的是oracle数据库时,如果查询的sql语句是select * from 表名的话,那么oracle默认我们是以只读方式访问表,所以我们程序设置为可更新的结果集,也是没有任何用处的,需要select 字段名..... from 表名,才能调用可更新的结果集。
下面我们演示 更新结果集的操作,把表的sname列,更新为“姓名”+i。
package com.shizhan.main;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.shizhan.util.DatabaseUtil;
public class TestResult {
/**
* @param args
*/
public static void main(String[] args) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
//当操作oracle数据库的时候,如果设置结果集是可更新的,则sql语句设置为select *from 表名,是无法更新的,需要设置select
//字段1,字段2.。。from表名
String sql ="select sno,sname from student";
try {
conn = DatabaseUtil.getConnection();
//ResultSet.TYPE_SCROLL_INSENSITIVE结果集可滚动
//ResultSet.CONCUR_UPDATABLE结果集可更新
ps = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);
rs = ps.executeQuery();
//指针移动到最后
rs.last();
//返回当前的行号
int rownum = rs.getRow();
for(int i=rownum;i>0;i--)
{
//指针移动到第i条记录
rs.absolute(i);
System.out.println("sno:"+rs.getInt(1)
+"\t"+"sname"+rs.getString(2));
//修改第二列的值
rs.updateString(2,"姓名"+i);
//提交修改,更新列
rs.updateRow();
}
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}finally{
DatabaseUtil.close(rs);
DatabaseUtil.close(ps);
DatabaseUtil.close(conn);
}
}
}
package com.shizhan.util; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class DatabaseUtil { static Connection connection = null; static String driver = "oracle.jdbc.driver.OracleDriver"; static String url = "jdbc:oracle:thin:localhost:1521:orcl"; static String username ="scott"; static String password ="tiger"; public static Connection getConnection() throws Exception { Class.forName(driver); connection = DriverManager.getConnection(url,username,password); return connection; } public static void close(Connection conn) {//关闭连接对象 if(conn != null) { //如果conn连接对象不为空 try { conn.close(); //关闭conn连接对象对象 } catch (SQLException e) { e.printStackTrace(); } } } public static void close(PreparedStatement pstmt) {//关闭预处理对象 if(pstmt != null) { //如果pstmt预处理对象不为空 try { pstmt.close(); //关闭pstmt预处理对象 } catch (SQLException e) { e.printStackTrace(); } } } public static void close(Statement pstmt) {//关闭预处理对象 if(pstmt != null) { //如果pstmt预处理对象不为空 try { pstmt.close(); //关闭pstmt预处理对象 } catch (SQLException e) { e.printStackTrace(); } } } public static void close(ResultSet rs) {//关闭结果集对象 if(rs != null) { //如果rs结果集对象不为null try { rs.close(); //关闭rs结果集对象 } catch (SQLException e) { e.printStackTrace(); } } } }
相关文章推荐
- JDBC 如何使用可滚动 可更新结果集
- [Java] JDBC 08 处理可更新的结果集 (sun提供了这样的接口,但是不见得所有的数据库厂商都支持)
- JDBC 如何使用可滚动 可更新结果集
- [Java] JDBC 08 处理可更新的结果集 (sun提供了这样的接口,但是不见得所有的数据库厂商都支持)
- JDBC可滚动和可更新结果集
- 关于JDBC(四)--- 可滚动和可更新结果集
- JDBC第三讲:jdbc2.0新特征和Updatability结果更新
- jdbc 可更新的结果集
- JDBC可滚动可更新结果集的探究(来自网络)
- JDBC可滚动可更新感知更新结果集
- 在JDBC中处理可更新的结果集
- 【学习摘记】马士兵JDBC技术_课时15_JDBC处理可更新的结果集
- JDBC之处理可滚动的结果集和可更新的结果集
- (2)JDBC (C3P0)大批量数据的插入、更新实用方法。(实战篇)-个人总结
- JDBC更新CLOB字段
- 再续NBear性能测试:ADO.NET, NBearV3, NHibernateV1, NBearLite, NBearLite+NBearMapping性能比较[2008/1/3修订:NBearLite更新至v1.0.1.0整合NBearMapping版地测试结果]
- [Java] JDBC 07 处理可滚动的结果集
- JDBC更新10W级以上数据性能优化
- 数据库 批量查询结果作为更新的值
- 如何使用jdbc template查询数据,而用ibatis组装结果?