我正在使用Prepared语句进行我的SELECT查询。之后,我试图从结果集获取信息,并将其放入数组列表中。我正在将其放入结果集循环,但我得到了一个错误。sql。SQLException:结果集关闭后不允许操作。我试图用rs.close()关闭它,但它给了我同样的错误。这是我的方法。请帮忙!
@SuppressWarnings("unchecked")
@Override
public List<Users> listUsersSort(Integer weight, String gender, String place, Integer ageTo, String currentUser) {
System.out.println(weight + gender + place + ageTo + currentUser);
Connection dbConnection = null;
PreparedStatement preparedStatement = null;
boolean weightFlag = false;
boolean genderFlag = false;
boolean placeFlag = false;
boolean ageToFlag = false;
int iterator = 0;
List<Users> usersList = new ArrayList<Users>();
String selectSQL = "select*from users where users.enabled = ?";
if (weight < 40 == false) {
String weightParam = " AND users.weight <= ?";
selectSQL = selectSQL.concat(weightParam);
weightFlag = true;
System.out.println(selectSQL);
}
if (gender.isEmpty() == false) {
String genderParam = " AND users.gender LIKE ?";
selectSQL = selectSQL.concat(genderParam);
genderFlag = true;
}
if (place.isEmpty() == false) {
String placeParam = " AND users.place LIKE ?";
selectSQL = selectSQL.concat(placeParam);
placeFlag = true;
// query = query.concat(placeParam);
}
if (ageTo < 19 == false) {
String age = " AND users.age <= ?";
selectSQL = selectSQL.concat(age);
ageToFlag = true;
}
String withoutUser = " AND users.username NOT LIKE ?";
selectSQL = selectSQL.concat(withoutUser);
System.out.println("FINAL QUERY IS: " + selectSQL);
Connection con = getConnection();
try {
preparedStatement = con.prepareStatement(selectSQL);
preparedStatement.setBoolean(++iterator, true);
if (weightFlag)
preparedStatement.setInt(++iterator, weight);
if (genderFlag)
preparedStatement.setString(++iterator, gender);
if (placeFlag)
preparedStatement.setString(++iterator, place);
if (ageToFlag)
preparedStatement.setInt(++iterator, ageTo);
preparedStatement.setString(++iterator, currentUser);
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
ResultSet rs = null;
try {
rs = preparedStatement.executeQuery();
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
Users userrs = new Users();
while (rs.next()) {
userrs.setUsername(rs.getString("username"));
userrs.setName(rs.getString("name"));
userrs.setSurname(rs.getString("surname"));
userrs.setGender(rs.getString("gender"));
userrs.setWeight(rs.getInt("weight"));
userrs.setHeight(rs.getInt("height"));
userrs.setSport(rs.getString("sport"));
userrs.setSport(rs.getString("place"));
usersList.add(userrs);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return usersList;
}
关闭连接也将关闭准备好的语句。
只有在使用结果集完成业务后才能关闭连接。
您的代码应如下所示:
Connection dbConnection=null;
PreparedStatement preparedStatement=null;
ResultSet rs = null;
try {
dbConnection = getConnection();
preparedStatement = dbConnection.preparedStatement(...);
... bind variables to preparedStatement ...
rs = preparedStatement.executeQuery();
... work with result set ...
} finally {
if (rs!=null)
rs.close();
if (preparedStatement!=null)
preparedStatement.close();
if (dbConnection!=null)
dbConnection.close();
}
编辑:在Java7中,你会写:
try (Connection dbConnection = getConnection();
PreparedStatement preparedStatement = dbConnection.preparedStatement(...)) {
... bind variables to preparedStatement ...
try (ResultSet rs = preparedStatement.executeQuery()) {
... work with result set ...
}
}
我试图为通过html形式的文本框检索的查询编写一个JUnit测试。文本检索已经过测试并有效,但我的单元测试失败了。我使用了两个相关的类:QueryController和QueryControlllerTest。我一直在玩弄我在这两个类中关闭的时间和内容,并不断得到错误:结果集关闭后不允许操作。 QueryController测试。Java语言 QueryController。Java语言
下面是相关的代码部分:Server. Proxy.update_allLogOut:(第65行是时括号) 服务器服务器: 主要: 我必须指出,它99%的运行时间都没有例外。。但有几次我遇到了这个例外,我不明白为什么会发生这种情况。有什么想法吗?很明显,有些地方做错了,但这里所有类似的主题都没有给出这个问题的答案。。。
我是java和SQL新手,我在重复一个我不知道如何避免的问题: 假设我想创建两个执行查询,一个在getRequest estsFromDB方法中的另一个内部,我创建第一个执行查询,在第二个方法中,我创建第二个执行查询: 第二个功能: 在第二个循环中,我得到了一个SQLException:“ResultSet关闭后不允许操作”,我尝试了:最后用result关闭结果。close()但我也得到异常nul
单击按钮时,此代码显示此错误消息: 结果集关闭后不允许操作 代码:
我已经为此工作了将近一天半,我似乎无法解决这个错误。我不知道为什么结果集被关闭。也许你们中的一些人可以帮我。 MySQL数据库: MySQLHandler MySQLDonation 异常发生在这里:在MySQLDonation和实际堆栈跟踪的同时循环中: 有了这些信息,让我说这确实有效,我得到了我的信息和游戏中没有的东西,但它会重复,就像用户永远不会从查询中删除,所以它会给他们无限的奖励。如果您
我目前正在使用MySQL for DB connection开发一个Struts2 Web应用程序,并且在实际工作中遇到了代码部分的问题。恒定误差: 我目前拥有的RequestAction类基本上是我的一个工作项目的完整副本,但由于某些原因,我无法使其用于此应用程序。 请求操作。Java: 不知道为什么连接不工作,我试图乱搞,看看从我的其他项目,看看有什么差异,使连接和无法找到它,除非是给问题。