热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

oracle查询可更新结果集,jdbc可更新结果集

jdbc中ResultSet在jdk5.0以后默认都是可滚动的,不可更新的。可滚动的意思是我们可以调用absolute(),previous(),fir

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);

}

}

}

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();

}

}

}

}



推荐阅读
author-avatar
阿门路亚_
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有