我理解当ResultSet一次只能打开一次时会出现此问题。所以我补充道 的更新
try
{
String sql = "SELECT * FROM test;
ResultSet rs = stmt.executeQuery(sql);
if(rs.next()){
do {
if(rs.getString("sent").equals("0")) {
try {
//update
try {
String psSQL = "UPDATE sent SET ..........";
updateStatement = conn.prepareStatement(psSQL);
updateStatement.setString(1, ....);
updateStatement.setString(2, ....);
updateStatement.setString(3, ...);
updateStatement.executeUpdate();
System.out.println("Record updated");
} catch (SQLException e) {
System.out.println(e.getMessage());
} finally {
if(updateStatement != null) {
updateStatement.close();
}
if (conn != null) {
conn.close();
}
}
} catch (MessagingException mex) {
mex.printStackTrace();
}
}
} while(rs.next()); **<---- Still same Error here**
} else if (rs.getRow() == 0) {
if (!mailSender.equals(".....")) {
try{
//insert
try {
String psSQL2 = "INSERT INTO sent"
+ "(......) VALUES"
+ "(?,?,?)";
insertStatement = conn.prepareStatement(psSQL2);
insertStatement.setString(1, ...);
insertStatement.setString(2, ....);
insertStatement.setString(3, ....);
insertStatement.executeUpdate();
System.out.println("Insert done!");
} catch (SQLException e) {
System.out.println(e.getMessage());
} finally {
if(insertStatement != null) {
insertStatement.close();
}
if (conn != null) {
conn.close();
}
}
}catch (MessagingException mex) {
mex.printStackTrace();
}
} else {
return null;
}
}
}
catch (SQLException se)
{
se.printStackTrace();
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
try
{
if (stmt != null) {
stmt.close();
}
}
catch (SQLException se2) {}
try
{
if (conn != null) {
conn.close();
}
}
catch (SQLException se)
{
se.printStackTrace();
}
}
所以..当while(rs.next())运行时我得到错误。我在rs.next()之前和之后输入了system.out.println,而在循环之后输入了第n个和第n个母猪。
我尝试使用另一个结果集rs2,但它也没有工作,所以我不知道这个问题是来自......
答案 0 :(得分:1)
更好的方法就是使用单个META-INF/services
a simple service-provider loading facility
希望这有帮助。
答案 1 :(得分:0)
ResultSet
与创建它的Statement
相关联。通过重复使用Statement
,您将关闭第一个ResultSet
。
如果您希望代码能够正常工作,则需要对第二个Statement
使用秒ResultSet
。