尝试运行 sql 语句时当前游标位置的操作无效



我试图从数据库中检索一行数据,但它给了我一个错误 当前光标位置的操作无效。

下面是我的数据库中的此示例

ID大陆国家地标

81 亚洲 日本 大阪环球影城 日本

...public static void main(String[] args) {
LocationDA locate = new LocationDA();
ResultSet rs =  locate.getRecord("81");
try{
System.out.println(rs.getString(5));
}catch(Exception ex){
System.out.println(ex.getMessage());
}
}

public ResultSet getRecord(String id) {
String sql = "SELECT * FROM LOCATION WHERE ID = ?";
ResultSet rs = null;
try {
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, id);
rs = pstmt.executeQuery();
} catch (SQLException ex) {
ex.getMessage();
}
return rs;
}

假设所有连接都已声明,并且我的数据库中有我的数据。我的 getRecord(( 位于类名 LocationDA 中。我在数据库中的 ID 被声明为 varchar,它是主键。我的错误在哪里,我该如何解决?

试试这个:

try{
rs.next();
System.out.println(rs.getString("5"));
}catch(Exception ex){
System.out.println(ex.getMessage("5"));
}

您的连接在哪里打开?您不应该无限期或不必要地保持连接打开状态。您的结果集不会调用其 next(( 函数,因此您不会迭代数据。但是,您不应该通过公共方法传递结果集(或者一般来说恕我直言(。而是创建一个类来表示结果集中的数据,并将结果集加载到所述对象中(然后返回该对象(。

请尝试:

public static void main(String[] args) {
LocationDA locate = new LocationDA();
Record record =  locate.getRecord("81");
try{
System.out.println(record.getLandmark());
}catch(Exception ex){
System.out.println(record.getMessage());
}
}

public ResultSet getRecord(String id) {
String sql = "SELECT * FROM LOCATION WHERE ID = ?";
try (Connection conn = ConnectionManager.getConnection()){
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, id);
ResultSet rs = pstmt.executeQuery();
while(rs.next()){
Record record = new Record();
record.setContinent(rs.getString(2));
//etc.
return record;
}
} catch (SQLException e) {
e.printStackTrace();
} catch(Exception e){
e.printStackTrace();
}
return null;
}

可以更改它以满足您的需求(例如不返回 null(;

最新更新