2015-05-30 87 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(); 
    } 


}