结果集更新错误

 saanenkim 发布于 2023-01-30 18:21

我为可滚动的resultset写了一个简单的代码.但它给了我一个错误.

码:

import java.sql.*;
import java.util.Properties;

public class Scrollable_Resultset {

public static void main(String[] args) throws Exception{

    Properties p = new Properties();
    p.put("user", "system");
    p.put("password", "password");

    DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
    Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe",p);

    Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);

    ResultSet rs = stmt.executeQuery("select * from EMPLOYEE");

    System.out.println("Displaying all the rows of the result set forward");
    while(rs.next())
    {
        System.out.println(rs.getInt(1));
        System.out.println(rs.getString(2));
        System.out.println(rs.getInt(3));
        System.out.println("--------------");
    }//end of while
    System.out.println("****************");

    System.out.println("Printing resultset in reverse order");
    rs.last();//go to last row
    while(rs.previous())
    {
        System.out.println(rs.getInt(1));
        System.out.println(rs.getString(2));
        System.out.println(rs.getInt(3));
        System.out.println("--------------");
    }//end of while
    System.out.println("****************");

    System.out.println("Printing only 1st row");
    rs.first();
    System.out.println(rs.getInt(1));
    System.out.println(rs.getString(2));
    System.out.println(rs.getInt(3));
    System.out.println("--------------");
    System.out.println("****************");

    System.out.println("Printing 3rd row of original data set");
    System.out.println(rs.getInt(1));
    System.out.println(rs.getString(2));
    System.out.println(rs.getInt(3));
    System.out.println("--------------");
    System.out.println("****************");

    System.out.print("No of rows before modification: ");
    rs.last();
    System.out.println(rs.getRow());
    System.out.println("****************");

    System.out.println("Updating 3rd row");
    rs.absolute(3);
    rs.updateInt(1, 999);
    rs.updateString(2,"John");
    rs.updateInt(3, 99000);
    rs.updateRow();
    System.out.println("****************");

    System.out.println("Inserting a new row");
    rs.moveToInsertRow();
    rs.updateInt(1, 99);
    rs.updateString(2,"Michael");
    rs.updateInt(3, 909);
    rs.insertRow();
    System.out.println("Deleting the 6th row");
    rs.absolute(6);
    rs.deleteRow();
    System.out.println("****************");
    con.close();
}

}

错误

Exception in thread "main" java.sql.SQLException: Invalid operation for read only    resultset: updateInt
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java)
at oracle.jdbc.driver.BaseResultSet.updateInt(BaseResultSet.java)
at jdbc.Scrollable_Resultset.main(Scrollable_Resultset.java:64)

虽然我使用了ResultSet.CONCUR_UPDATABLE,但在尝试更新数据时会出错.任何人都可以让我知道同样的原因是什么?

1 个回答
  • 原因是您正在使用Select查询并尝试执行Update操作

    ResultSet rs = stmt.executeQuery("select * from EMPLOYEE");
    

    另一点是"SELECT*"使Resultset成为ReadOnly

    如果要执行更新操作,则需要在" 选择查询"中指定列

    2023-01-30 18:23 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有