2015-05-30 88 views
0

我创建了一个简单的应用程序,允许用户购买门票。但是,每当我尝试购买“n”张票时,我都会遇到此错误。现在,我知道在使用数据库时需要使用crs.next()语句,我已经使用了很多次,但由于某种原因,它在这里不起作用。它给我提供了java.sql.SQLException:光标位置无效错误。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 .The payID设置和使用payID我尝试插入票表。如果我在crs.next()声明中放置断点,则输入数据。没有它,它给了我例外。感谢您的帮助

CRS初始化

CachedRowSet的CRS = RowSetProvider.newFactory()createCachedRowSet()。

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

    crs.setUsername("x"); 

    crs.setPassword("x"); 

UPDATE

放置INSERT声明中try-catch块之后,门票进入数据库,但是现在更新崩溃,给人一种java.lang.NullPointerException

+2

什么是'crs' - 你可以在这个变量声明的代码中添加什么?看起来你正在对'SELECT','INSERT'和'UPDATE'重新使用相同的'Statement',这可能会导致这个问题。 –

+0

@MickMnemonic crs是一个CachedRowSet类型的变量。 – LoXatoR

+0

@MickMnemonic另外,它的3AM在这里。如果我在醒来后发布代码,可以吗? – LoXatoR

回答

0

该方法可用作临时修复程序,因为捕获到异常。这不让我设置“n”票数和只有2票!它也给出了一个java.lang.NullPointerException,因为我没有设置IDeventID。从我这边来看,这种说法很sl。。

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(); 
    } 


}