ResultSet未打开。不允许操作'moveToInsertRow'。验证自动提交是否已关闭

时间:2014-10-16 08:41:50

标签: java jdbc derby

我遇到此错误的问题,当我点击按钮时,它会获取标签的值并将其放在数据库的表格中

void showAll(){
    try{
        rs1 = stmt.executeQuery("SELECT * FROM BORROW_RETURN");
        while(rs1.next())
        {
            String bookpp = rs1.getString("name");
            String emailse = rs1.getString("email");
            String booktee = rs1.getString("book_title");
            String ser_no = rs1.getString("serial_no");
            String borr = rs1.getString("borrowed");
            String ret = rs1.getString("return");
            loginModel3.addRow(new Object[]{bookpp, emailse, booktee, ser_no, borr, ret});
        }}catch(SQLException err){
            System.out.print(err);
    }
}

这是与数据库连接的连接

void DoConnect1( ) {
               try{
                String host = "jdbc:derby://localhost:1527/Dafuq7";
                String uName ="Dafuq7";
                String uPass ="Dafuq7";
                con = DriverManager.getConnection(host, uName, uPass);

                //EXECUTE SOME SQL AND LOAD THE RECORDS INTO THE RESULTSET
                    stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, 
                    ResultSet.CONCUR_UPDATABLE);
                String sql = "SELECT * FROM borrow_return";
                rs1 = stmt.executeQuery(sql);

                   }


    catch (SQLException err) {
        System.out.println(err.getMessage() );
    }
}

并且在单击按钮时发生所述错误,

private void jButton6ActionPerformed(java.awt.event.ActionEvent evt) {                                         
   String ema = jLabel20.getText();
    String enm = jLabel21.getText();
    String booknm = bttl.getText();
    String snnnn = sernum.getText();
    dateFormat = new SimpleDateFormat("yyyy-MM-dd");
    String dates = dateFormat.format(date_borr.getDate());
    try {

        rs1.moveToInsertRow();
        rs1.updateString( "book_title", booknm );
        rs1.updateString( "serial_no", snnnn );
        rs1.updateString( "name", enm );
        rs1.updateString( "email", ema );
        rs1.updateString( "borrowed", dates );
        JOptionPane.showMessageDialog(null, "HAHA");
        loginModel3.addRow(new Object[]{names, booknm, snnnn, enm, ema, dates});

        con.setAutoCommit(false);
System.out.println(con.getAutoCommit());
rs1.insertRow( );
        stmt.close();
        rs1.close();

        stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
        String sql = "SELECT * FROM accounts";

        rs1 = stmt.executeQuery(sql);
        }
    catch (SQLException err) {
        System.out.println(err.getMessage() );
    }
}

2 个答案:

答案 0 :(得分:0)

在确实提交查询后,您将autoCommit设置为false。在打开连接之后或开始执行查询之前,您需要将其设置为false。

        con = DriverManager.getConnection(host, uName, uPass);
        //EXECUTE SOME SQL AND LOAD THE RECORDS INTO THE RESULTSET
        stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, 
        ResultSet.CONCUR_UPDATABLE);
        String sql = "SELECT * FROM borrow_return";
        con.setAutoCommit(false);
        rs1 = stmt.executeQuery(sql);

答案 1 :(得分:0)

https://codedump.io/share/WK0Jtw7GEH3h/1/why-do-i-get-javasqlsqlexception-resultset-not-open-operation-39next39-not-permitted-java-derby-database

默认情况下,每个ResultSet对象只能同时打开一个Statement个对象。因此,如果一个ResultSet对象的读取与另一个Statement对象的读取交错,则每个对象必须由不同的Statement对象生成。 ResultSet接口中的所有执行方法都会隐式关闭一个语句的当前&n对象(如果存在开放的对象)。