Statement stmt = null;
ResultSet rs = null;
try {
conn = JdbcUtil.getConnection();
stmt = conn.createStatement();
String sql = "select * from ps_dp_fax_out";
rs = stmt.executeQuery(sql);
while (rs.next()) {
...................
...................//向另一个数据库插入记录
...................
}
//然后update本数据库的数据
String changeSql ="insert ps_dp_fax_change values ('"
+ rs.getString("id") + "','" + ExID + "','"+currDate+"')";
int n = stmt.executeUpdate(changeSql); //为什么stmt 重复利用的时候, 下一个循环 rs.next() 会出错 [Microsoft][SQLServer 2000 Driver for JDBC]Object has been closed.
10 个解决方案
#1
你看看是不是调用了stmt.close()方法
#2
while (rs.next()) {
...................
...................//向另一个数据库插入记录
...................
}
以上代码跑过以后,rs.next()为false;调用rs.getString("id")会报错
...................
...................//向另一个数据库插入记录
...................
}
以上代码跑过以后,rs.next()为false;调用rs.getString("id")会报错
#3
rs = stmt.executeQuery(sql);
是查询的啊
插入是stmt.executeUpdata(sql);
而且这种Statement 在插入数据时候不推荐使用
你可以用 PreparedStatement
这个会很方便的
尤其在多条时候优势更明显
是查询的啊
插入是stmt.executeUpdata(sql);
而且这种Statement 在插入数据时候不推荐使用
你可以用 PreparedStatement
这个会很方便的
尤其在多条时候优势更明显
#4
这个确实是这样的,建议可以使用多个statement
#5
问题所在应该是 cyfnjtu(迎风) 所讲的
#6
while (rs.next()) {
...................
...................//向另一个数据库插入记录
...................
//然后update本数据库的数据
String changeSql ="insert ps_dp_fax_change values ('"
+ rs.getString("id") + "','" + ExID + "','"+currDate+"')";
int n = stmt.executeUpdate(changeSql); //为什么stmt 重复利用的时候, 下一个循环 rs.next() 会出错 [Microsoft][SQLServer 2000 Driver for JDBC]Object has been closed.
}
代码贴错了
...................
...................//向另一个数据库插入记录
...................
//然后update本数据库的数据
String changeSql ="insert ps_dp_fax_change values ('"
+ rs.getString("id") + "','" + ExID + "','"+currDate+"')";
int n = stmt.executeUpdate(changeSql); //为什么stmt 重复利用的时候, 下一个循环 rs.next() 会出错 [Microsoft][SQLServer 2000 Driver for JDBC]Object has been closed.
}
代码贴错了
#7
ResultSet是和Statement关联的,你重新执行了executeUpdate后之前的数据集就已经因为Statement内容的改变而关闭了。建议你用另一个Statement来执行更新。
#8
换个JDBC驱动试试 比如换成JTDS 因为MSSQL驱动不是很可靠.
#9
ResultSet是和Statement关联的,你重新执行了executeUpdate后之前的数据集就已经因为Statement内容的改变而关闭了。建议你用另一个Statement来执行更新。
正解
正解
#10
stmt = conn.createStatement();
改成:stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
第一个参数可以取值为
ResultSet.RTYPE_FORWORD_ONLY,只可向前滚动;
ResultSet.TYPE_SCROLL_INSENSITIVE,双向滚动,但不及时更新,就是如果数据库里的数据修改过,并不在ResultSet中反应出来。
ResultSet.TYPE_SCROLL_SENSITIVE,双向滚动,并及时跟踪数据库的更新,以便更改ResultSet中的数据。
第二个参数可以取值为
ResultSet.CONCUR_READ_ONLY:这是缺省值,指定不可以更新 ResultSet
ResultSet.CONCUR_UPDATABLE:指定可以更新 ResultSet
改成:stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
第一个参数可以取值为
ResultSet.RTYPE_FORWORD_ONLY,只可向前滚动;
ResultSet.TYPE_SCROLL_INSENSITIVE,双向滚动,但不及时更新,就是如果数据库里的数据修改过,并不在ResultSet中反应出来。
ResultSet.TYPE_SCROLL_SENSITIVE,双向滚动,并及时跟踪数据库的更新,以便更改ResultSet中的数据。
第二个参数可以取值为
ResultSet.CONCUR_READ_ONLY:这是缺省值,指定不可以更新 ResultSet
ResultSet.CONCUR_UPDATABLE:指定可以更新 ResultSet
#1
你看看是不是调用了stmt.close()方法
#2
while (rs.next()) {
...................
...................//向另一个数据库插入记录
...................
}
以上代码跑过以后,rs.next()为false;调用rs.getString("id")会报错
...................
...................//向另一个数据库插入记录
...................
}
以上代码跑过以后,rs.next()为false;调用rs.getString("id")会报错
#3
rs = stmt.executeQuery(sql);
是查询的啊
插入是stmt.executeUpdata(sql);
而且这种Statement 在插入数据时候不推荐使用
你可以用 PreparedStatement
这个会很方便的
尤其在多条时候优势更明显
是查询的啊
插入是stmt.executeUpdata(sql);
而且这种Statement 在插入数据时候不推荐使用
你可以用 PreparedStatement
这个会很方便的
尤其在多条时候优势更明显
#4
这个确实是这样的,建议可以使用多个statement
#5
问题所在应该是 cyfnjtu(迎风) 所讲的
#6
while (rs.next()) {
...................
...................//向另一个数据库插入记录
...................
//然后update本数据库的数据
String changeSql ="insert ps_dp_fax_change values ('"
+ rs.getString("id") + "','" + ExID + "','"+currDate+"')";
int n = stmt.executeUpdate(changeSql); //为什么stmt 重复利用的时候, 下一个循环 rs.next() 会出错 [Microsoft][SQLServer 2000 Driver for JDBC]Object has been closed.
}
代码贴错了
...................
...................//向另一个数据库插入记录
...................
//然后update本数据库的数据
String changeSql ="insert ps_dp_fax_change values ('"
+ rs.getString("id") + "','" + ExID + "','"+currDate+"')";
int n = stmt.executeUpdate(changeSql); //为什么stmt 重复利用的时候, 下一个循环 rs.next() 会出错 [Microsoft][SQLServer 2000 Driver for JDBC]Object has been closed.
}
代码贴错了
#7
ResultSet是和Statement关联的,你重新执行了executeUpdate后之前的数据集就已经因为Statement内容的改变而关闭了。建议你用另一个Statement来执行更新。
#8
换个JDBC驱动试试 比如换成JTDS 因为MSSQL驱动不是很可靠.
#9
ResultSet是和Statement关联的,你重新执行了executeUpdate后之前的数据集就已经因为Statement内容的改变而关闭了。建议你用另一个Statement来执行更新。
正解
正解
#10
stmt = conn.createStatement();
改成:stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
第一个参数可以取值为
ResultSet.RTYPE_FORWORD_ONLY,只可向前滚动;
ResultSet.TYPE_SCROLL_INSENSITIVE,双向滚动,但不及时更新,就是如果数据库里的数据修改过,并不在ResultSet中反应出来。
ResultSet.TYPE_SCROLL_SENSITIVE,双向滚动,并及时跟踪数据库的更新,以便更改ResultSet中的数据。
第二个参数可以取值为
ResultSet.CONCUR_READ_ONLY:这是缺省值,指定不可以更新 ResultSet
ResultSet.CONCUR_UPDATABLE:指定可以更新 ResultSet
改成:stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
第一个参数可以取值为
ResultSet.RTYPE_FORWORD_ONLY,只可向前滚动;
ResultSet.TYPE_SCROLL_INSENSITIVE,双向滚动,但不及时更新,就是如果数据库里的数据修改过,并不在ResultSet中反应出来。
ResultSet.TYPE_SCROLL_SENSITIVE,双向滚动,并及时跟踪数据库的更新,以便更改ResultSet中的数据。
第二个参数可以取值为
ResultSet.CONCUR_READ_ONLY:这是缺省值,指定不可以更新 ResultSet
ResultSet.CONCUR_UPDATABLE:指定可以更新 ResultSet