java JDBC无效的游标状态
我是编写程序的初学者,我已经为我的作业创建了一个搜索记录功能
public void searchRecord(){
for(int ct = 0; ct< 1; ct++){
System.out.println("Please insert student ID");
System.out.print("Student ID: ");//prompt for student ID to search
String data = k.nextLine().trim();
String sql = "SELECT * FROM Students WHERE StudentID = '"+data+"'";
try{
rs = st.executeQuery(sql);
if(rs.next()){
displayRecord();
rs.next();
showMenu();
}
else{
System.out.print("No record found. ");
ct--;
}
}catch (Exception ex){
System.out.println("Problem searching.");
}
}
然而,在我尝试从结果中获取数据后,它显示Invalid Cursor State
。
如果我想检索数据,我必须执行Display next record
方法,它是:
try{
if(rs.next()){
displayRecord();
}
else{
rs.previous();
System.out.println("No more records!");
}
}catch (Exception ex){
System.out.println("There is problem showing next data.");
}
我尝试在“displayRecord”之后的搜索记录方法中添加“rs.next”,但这并不能解决问题。有没有办法解决这个问题
顺便说一下,我的显示记录方法:
public void displayRecord(){//get and display data from current row of record
try{
String ID = rs.getString(1);
String fname = rs.getString(2);
String lname = rs.getString(3);
String conNo = rs.getString(4);
String mail = rs.getString(5);
String plate = rs.getString(6);
Date date = rs.getDate(7);
System.out.print("Student ID: "+ID+"\nName: "+fname+" "+lname+"\nCar Number: "+plate+"\nContact Number: 0"+conNo+"\nE-Mail Address: "+mail+"\nDate Registered: "+date);
}catch (Exception ex){
System.out.println(ex);
}
}
任何帮助或建议都将不胜感激
# 1 楼答案
我不太明白你的代码应该做什么。但我怀疑您没有完全理解JDBC语句和结果集是如何工作的
如果执行一个返回多行的查询,您将编写如下内容:
请注意,
ResultSet
实例允许您从当前结果行访问数据next()
这两个行都前进到下一个结果行,并告诉您是否有下一行(或者您是否已前进到上一行之外)。最初,它位于第一个结果行之前。因此,在访问第一行数据之前需要调用next()
。但是这些都是在一行中完成的在您的情况下,我希望查询只返回一个结果行,因为
StudendID
很可能是唯一的键。所以代码如下所示:但是,您的代码包含两个对
next()
的调用和另一个对previous()
的调用,这让人困惑错误消息无效光标状态表示您试图访问当前行的数据,而事实上结果集位于结果集开始之前或结束之后