【问题标题】:Mysql Java Derby Netbeans: 'deleteRow' not allowed because the ResultSet is not an updatable ResultSetMysql Java Derby Netbeans:不允许“deleteRow”,因为 ResultSet 不是可更新的 ResultSet
【发布时间】:2015-08-09 06:27:37
【问题描述】:

我正在尝试删除一行,但它不允许我,它说“'deleteRow' 不允许,因为 ResultSet 不是可更新的 ResultSet”。这是我的代码:

public void addUserName() throws SQLException {
    rs = st.executeQuery("select NAME, prize from usernames");
    try {
        while (rs.next()) {
            String attribute2 = rs.getString("name");

            if (attribute2.equals(getName())){
                String toPrint = rs.getString(2);
                System.out.println("Welcome back " + getName());
                System.out.println("You previously won " + toPrint);
                System.out.println("Let's see if you can do any better this time :)");
                rs.deleteRow();

            }
        }

    } catch (SQLException ex) {
        Logger.getLogger(Millionaire.class.getName()).log(Level.SEVERE, null, ex);
    }

}

我在这里做错了什么?任何建议将不胜感激。提前致谢。

这就是我创建表的方式,并添加了给出的建议,但仍然出现相同的错误:

public void createTable(String tableName) {
    try {
        Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
                              ResultSet.CONCUR_UPDATABLE);
        //String newTable = "millionair";

        //statement.executeUpdate("drop table if exists "+newTable);
        String sqlCreateTable = "CREATE TABLE " + tableName + " (NAME VARCHAR(50), PRIZE INT)";

        stmt.executeUpdate(sqlCreateTable);
    } catch (SQLException ex) {

        System.err.println("SQLException: " + ex.getMessage());
    }
}

【问题讨论】:

    标签: java mysql netbeans jdbc derby


    【解决方案1】:

    来自docs

    默认的 ResultSet 对象是不可更新的,并且有一个光标 只向前移动。因此,您只能遍历它一次并且 仅从第一行到最后一行。可以生产 可滚动和/或可更新的 ResultSet 对象。下列 代码片段,其中 con 是一个有效的 Connection 对象,说明 如何制作可滚动且对更新不敏感的结果集 由其他人,这是可更新的。有关其他信息,请参见 ResultSet 字段 选项。

       Statement stmt = con.createStatement(
                                      ResultSet.TYPE_SCROLL_INSENSITIVE,
                                      ResultSet.CONCUR_UPDATABLE);
       ResultSet rs = stmt.executeQuery("SELECT a, b FROM TABLE2");
       // rs will be scrollable, will not show changes made by others,
       // and will be updatable
    

    所以你必须在创建语句时设置ResultSet.CONCUR_UPDATABLE属性。

    【讨论】:

    • 我尝试了您的建议,但得到了同样的错误,也许问题出在我创建表的方式上?请检查我的编辑。
    • @almostabeginner st 变量在哪里初始化,您在 addUserName() 中使用您必须将 ResultSet.CONCUR_UPDATABLE 放在 st 变量上,而不是在 stmt 变量初始化中
    • 我在我的数据库类的构造函数中初始化了st,我在建立mysql连接之后就这样做了。哦,这很有意义,哈哈,我认为这应该可行,请等一下。
    • 非常感谢,效果很好,感谢阅读材料,它对理解部分内容很有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-23
    • 2018-03-20
    • 1970-01-01
    • 1970-01-01
    • 2012-06-11
    相关资源
    最近更新 更多