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