我试图从数据库中检索一行数据,但它在当前光标位置给了我错误的无效操作。
下面是我的数据库中的示例
欧洲大陆国家地标
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,它是主键。我的错误在哪里,如何解决?
发布于 2019-08-08 20:34:06
试试这个:
try{
rs.next();
System.out.println(rs.getString("5"));
}catch(Exception ex){
System.out.println(ex.getMessage("5"));
}发布于 2019-08-08 20:38:19
您的连接在哪里开通?您不应该无限期地或不必要地保持连接打开。结果集没有调用它的下一个()函数,所以不迭代数据。但是,您不应该通过公共方法传递结果集(或者通常是imho)。相反,创建一个类来表示结果集中的数据,并将结果集加载到所述对象中(然后返回该对象)。
试一试:
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);
https://stackoverflow.com/questions/57420022
复制相似问题