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();
}
}
我创建了一个简单的应用程序,让用户可以购买门票。但是,每当我尝试购买“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();
}
}