ResultSet连续通过Statement赋值,会出现错误

  ResultSet连续通过Statement赋值,会出现错误

  错误提示:jdbc Operation not allowed after ResultSet closed

  

 1 public Task[] getTaskInfo(String a_id){
 2         Task[] task = null;
 3         Connection conn = null;
 4         Statement stmt = null;
 5         ResultSet rs1 = null;
 6         ResultSet rs2 = null;
 7         try{
 8             Class.forName("com.mysql.jdbc.Driver");
 9             conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/p_note","root","root");
10             stmt = conn.createStatement();
11             String sql = "select count(*) from tasks";
12             String sql2 = "select * from tasks" ;
13             rs1 = stmt.executeQuery(sql);
14             rs2 = stmt.executeQuery(sql2);
15             int count = 0;
16             while(rs1.next()){
17                 count = rs1.getInt(1);
18             }
19             task = new Task[count];
20             int i=0;
21             while(rs2.next()){
22                 task[i] = new Task();
23                 task[i].setA_id(a_id);
24                 task[i].setT_id(rs2.getString("t_id"));
25                 task[i].setExecuteTime("t_time");
26                 task[i].setExecuteSite(rs2.getString("t_site"));
27                 task[i].setItemName(rs2.getString("t_items"));
28                 task[i].setSetout(rs2.getString("t_setout"));
29                 task[i].setT_createTime(rs2.getString("t_createTime"));
30                 task[i].setT_stamp(rs2.getString("t_stamp"));
31                 task[i].setT_stick(rs2.getString("t_stick"));
32                 i++;
33             }
34
35         }catch(Exception ex){
36             ex.printStackTrace();
37
38         }finally{
39             try{
40                 if(conn != null){
41                     conn.close();
42                 }
43                 if(stmt != null){
44                     stmt.close();
45                 }
46                 if(rs1 != null){
47                     rs1.close();
48                 }
49                 if(rs2 != null){
50                     rs2.close();
51                 }
52             }catch(Exception ex){
53                 ex.printStackTrace();
54             }
55         }
56
57         return task;
58     }

  红色标记部分会出现错误

  

  原因:数据库提供的方法中,当再次用相同的Statement对ResultSet赋值时,会有个判断 if(ReslutSet != null) {}.在这个方法里面,rs1会被关掉。所以就存在了以上的问题。jdbc Operation not allowed after ResultSet closed

时间: 2024-10-29 19:07:24

ResultSet连续通过Statement赋值,会出现错误的相关文章

mybatis中Invalid bound statement (not found) 和 Result Maps collection already contains value for...错误解决方案

一.Invalid bound statement (not found) 使用mybatis有时候会报Invalid bound statement (not found)这种错误,总结了下,可能有两种情况如下: 1.mybatis的对应的mapper.xml找不到对应的命名sql或者名称与mapper接口名称不一致. 2.xml文件与接口名称都对,但是在mybatis配置文件中漏掉了配置,也会报这种错误. 二.Result Maps collection already contains v

为什么为 const 变量重新赋值不是个静态错误

const 和 let 的唯一区别就是用 const 声明的变量不能被重新赋值(只读变量),比如像下面这样就会报错: const foo = 1 foo = 2 // TypeError: Assignment to constant variable. 注:本文不会使用“常量”这个术语,因为我觉的这个术语容易有歧义:有些人把数字.字符串等这些不可改变的字面量称为常量,也有人把一些只读属性称为常量,比如 Math.PI,还有人把 ES6 里用 const 声明的变量称为常量.不过一般来说,这点歧

【转】JDBC学习笔记(2)——Statement和ResultSet

转自:http://www.cnblogs.com/ysw-go/ Statement执行更新操作 Statement:Statement 是 Java 执行数据库操作的一个重要方法,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句.Statement对象,用于执行不带参数的简单SQL语句. 通过JDBC向指定的数据表中插入一条记录,需要注意下面的几点: * 1.Statement:用于执行SQL语句的对象 * 1).通过COnnection的createStatement()方

Connection、Statement、PreparedStatement 、Resultset注意点备忘

先记录一下几个测试结果 测试环境 MySQL:mysql-connector-java-5.1.29.jar Java:1.7.0_67 测试A 代码:         PreparedStatement pstmt = conn                 .prepareStatement("select id from world.city limit 3");         ResultSet rs = pstmt.executeQuery();         whil

SQLExecption:Operation not allowed after ResultSet closed解决办法

原网址:http://blog.csdn.net/sku0923/article/details/1722370 一个stmt多个rs进行操作引起的ResultSet已经关闭错误 一个stmt多个rs进行操作. 那么从stmt得到的rs1,必须马上操作此rs1后,才能去得到另外的rs2,再对rs2操作. 不能互相交替使用,会引起rs已经关闭错误. 错误的代码如下:  stmt=conn.createStatement(); rs=stmt.executeQuery("select * from

Java 数据库编程 ResultSet 的 使用方法

结果集(ResultSet)是数据中查询结果返回的一种对象,可以说结果集是一个存储查询结果的对象,但是结果集并不仅仅具有存储的功能,他同时还具有操纵数据的功能,可能完成对数据的更新等. 结果集读取数据的方法主要是getXXX() ,他的参数可以使整型表示第几列(是从1开始的),还可以是列名.返回的是对应的XXX类型的值. 如果对应那列时空值,XXX是对象的话返回XXX型的空值,如果XXX是数字类型,如Float等则返回0,boolean返回false. 使用getString()可以返回所有的列

Java 中的resultset详解

结果集(ResultSet)是数据中查询结果返回的一种对象,可以说结果集是一个存储查询结果的对象,但是结果集并不仅仅具有存储的功能,他同时还具有操纵数据的功能,可能完成对数据的更新等. 结果集读取数据的方法主要是getXXX() ,他的参数可以使整型表示第几列(是从1开始的),还可以是列名.返回的是对应的XXX类型的值.如果对应那列时空值,XXX是对象的话返回XXX型的空值,如果XXX是数字类型,如Float等则返回0,boolean返回false. 使用getString()可以返回所有的列的

JDBC ResultSet 可更新的结果集

接着上一篇:可滚动的结果集: 1)com.microsoft.sqlserver.jdbc.SQLServerException: 结果集不可更新. 当concurrency设置为:ResultSet.CONCUR_READ_ONLY(默认)时,结果集不能更新数据,否则会报 SQLServerException 示例: statement = con.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_R

JDBC ResultSet 可滚动的结果集

可滚动的结果集 1)com.microsoft.sqlserver.jdbc.SQLServerException: 只进结果集不支持请求的操作. 当type设置为:ResultSet.TYPE_FORWARD_ONLY(默认)时,游标是不能任意移动的,只能逐步向前,否则会报 SQLServerException 示例: statement = con.prepareStatement(sql, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_XXX)