【问题标题】:java.sql.SQLException: Invalid cursor positionjava.sql.SQLException:游标位置无效
【发布时间】:2015-05-30 21:25:52
【问题描述】:

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

这是我插入票的代码 sn-p。

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 我尝试插入到 Ticket 表中。如果我在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

【问题讨论】:

  • 什么是crs -- 你能在代码中添加这个变量的声明吗?看起来您正在为 SELECTINSERTUPDATE 重复使用相同的 Statement,这可能是导致问题的原因。
  • @MickMnemonic crs 是一个 CachedRowSet 类型变量。
  • @MickMnemonic 另外,这里是凌晨 3 点。起床后贴代码可以吗?
  • 是的,如果您只在清醒时发布代码,对我来说完全没问题。 :)
  • @MickMnemonic 谢谢!一旦我发布它,我会标记你。感谢您宝贵的时间:)

标签: java sql jdbc derby


【解决方案1】:

当异常被捕获时,该方法作为临时修复。这不允许我设置“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();
    }


}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-02
    • 2023-04-03
    • 2020-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-08
    • 1970-01-01
    相关资源
    最近更新 更多