java.sql.SQLException: 光标位置无效

java.sql.SQLException: Invalid cursor position

我创建了一个简单的应用程序,让用户可以购买门票。但是,每当我尝试购买“n”张票时,我都会 运行 进入此错误。现在,我知道您在操作数据库时需要 crs.next() 语句,我已经多次使用它,但由于某种原因它在这里不起作用。它给了我 java.sql.SQLException: 无效的光标位置 错误。

这是我用于插入票证的代码片段。

public void buyTicket(int id,int n,int price) throws SQLException{

    crs.setCommand("SELECT PAYID FROM PAYMENTINFO WHERE ACCOUNT = '"+2134541+"'");
    crs.execute();
    crs.next();
    payID = crs.getInt("PAYID");
    
    
    for(int i=0;i<n;i++){
        
    crs.setCommand("Insert into Tickets (TicketType,EventID,UserID,PayID,Price) values ("+false+","+id+
            ","+ loginBean.getuID() + ","+payID+","+price+")");
    
    crs.execute();
    crs.next();
    }

    crs.setCommand("UPDATE EVENTS SET MAXTICKETS = MAXTICKETS - "+n+"WHERE EVENTID = "+eb.getEventID());
    crs.execute();
    crs.next();
   
}

问题出现在 for loop 内。payID 已设置并使用 payID 我尝试插入票证 table。如果我在 crs.next() 语句处放置断点,则输入数据。没有它,它给了我例外。感谢您的帮助

CRS 初始化

CachedRowSet crs = RowSetProvider.newFactory().createCachedRowSet();

    crs.setUrl("jdbc:derby://localhost:1527/Events Ticket Management");

    crs.setUsername("x");

    crs.setPassword("x");

更新

INSERT 语句放入 try-catch 块后,门票将输入数据库,但现在更新崩溃,给出 java.lang.NullPointerException.

该方法在捕获到异常时用作临时修复。这不让我设置 "n" 张票而且只有 2 张票!它还给出了 java.lang.NullPointerException,因为我没有将 ID 设置为 eventID。这对我来说有点草率。

   public void buyTicket(int id,int n,int price) throws SQLException{
    crs.setCommand("SELECT PAYID FROM PAYMENTINFO WHERE ACCOUNT = '"+account+"'");
    crs.execute();
    crs.next();
    payID = crs.getInt("PAYID");

    try{
    for(int i=0;i<n;i++){

    crs.setCommand("Insert into Tickets (TicketType,EventID,UserID,PayID,Price) values ("+false+","+id+
            ","+ loginBean.getuID() + ","+payID+","+price+")");

    crs.execute();
    crs.next();


    }
    }
    catch(SQLException e){

    System.out.println("  Message:    " + e.getMessage());
    e = e.getNextException();}

    try{
    crs.setCommand("UPDATE EVENTS SET MAXTICKETS = MAXTICKETS - "+n+"WHERE EVENTID = "+id);
    crs.execute();
    crs.next();
    }
    catch(SQLException e ){

    System.out.println("  Message:    " + e.getMessage());
    e = e.getNextException();
    }


}