Mysql Java Derby Netbeans:不允许使用'deleteRow',因为ResultSet不是可更新的ResultSet

时间:2015-05-27 09:07:37

标签: java mysql netbeans jdbc derby

我正在尝试删除一行,但它不允许我,它说''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());
    }
}

1 个答案:

答案 0 :(得分:2)

来自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属性。