resultset连续通过statement赋值,会出现错误

飞出四季做的茧 飞出四季做的茧     2022-08-08     233

关键词:

  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

jdbc学习笔记——statement和resultset

转自:http://www.cnblogs.com/ysw-go/ Statement执行更新操作Statement:Statement是Java执行数据库操作的一个重要方法,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句。Statement对象,用于执行不带参数的简单SQL语句... 查看详情

在java中connection、statement、resultset、preparedsta

在Java中Connection、Statement、ResultSet、PreparedStatement各是什么意思?Statement和PreparedStatement的区别是什么?两者各在什么情况下使用? Connection是建立与数据库的链接,Statement算是一个连接的实例,用来执行SQL语句,ResultSet是查... 查看详情

jdbc中的resultset

ResultSet:结果集。存放数据库中的数据,可以将它想象成一张数据表,通过Statement对象中的executeQuery()方法获得   importcom.mysql.jdbc.Statement;importjava.sql.Connection;importjava.sql.Driver;importjava.sql.ResultSet;importja 查看详情

在 Statement 和 ResultSet 上设置提取大小之间的区别

】在Statement和ResultSet上设置提取大小之间的区别【英文标题】:DifferencebetweensettingafetchsizeonStatementvsResultSet【发布时间】:2016-05-2315:03:43【问题描述】:在Statement和ResultSet上设置提取大小有什么区别?Oracle文档说,如果在Statement... 查看详情

何时关闭 JDBC 中的 Connection、Statement、PreparedStatement 和 ResultSet

】何时关闭JDBC中的Connection、Statement、PreparedStatement和ResultSet【英文标题】:WhentocloseConnection,Statement,PreparedStatementandResultSetinJDBC【发布时间】:2010-11-0513:57:25【问题描述】:关于JDBC编码的几个问题:对于单个客户端应用程序,我... 查看详情

java示例代码_在while循环中正确处理Connection、ResultSet和Statement对象

java示例代码_在while循环中正确处理Connection、ResultSet和Statement对象 查看详情

深入浅出mybaits

...ection,打开Statement对象。通过Statement执行SQL,返回结果到ResultSet对象。使用ResultSet读取数据,然后通过代码转化为具体的POJO对象。释放数据库相 查看详情

jdbc数据库连接在方法中,而且要返回statement或resultset在方法里关闭连接会怎么样?要怎么处理?

如果要返回statement或者resultset就不能关闭连接,关了的话作为返回值被传出去的statement或者resultset被访问到的时候就会抛出异常。连接不关不会被有异常,但程序被多次执行后就有连接被占满,不能取得连接的问题出现。一般需... 查看详情

jdbcstatement

...ment对象之后才能执行SQL对象 Statement常用的方法:->ResultSetexecuteQuery()throwsSQLException:用于执行查询语句,并返回查询结果对应的ResultSet,该方法只能用 查看详情

ResultSet.insertRow() VS Statement.executeUpdate("INSERT INTO...")。哪个更好用?

】ResultSet.insertRow()VSStatement.executeUpdate("INSERTINTO...")。哪个更好用?【英文标题】:ResultSet.insertRow()VSStatement.executeUpdate("INSERTINTO...").Whichisbettertouse?【发布时间】:2012-02-1712:24:55【问题描述】:在使用Java 查看详情

简述jdbc中三种statement对象的作用

...在默认情况下,同一时间每个Statement对象在只能打开一个ResultSet对象。因此,如果读取一个ResultSet对象与读取另一个交叉,则这两个对象必须是由不同的Statement对象生成的。如果存在某个语句的打开的当前ResultSet对象,则Statement... 查看详情

javaweb_jdbc_resultset查询操作

 JDBC基础_resultSet结果集1.概述以及注意事项(1).什么是ResultSet?ResultSet是对象以逻辑表格的形式封装了执行数据库操作的结果集,ResultSet接口由数据库厂商实现 (2).如何创建ResultSet通过调用Statement对象的excuteQuery()方法创建该对... 查看详情

statement.addbatch()/statement.executebatch()返回结果集?

...romt3"));statement.executeBatch();我怎么得到各个select返回的ResultSet?参考技术AexecuteBatch不能执行返回值是ResultSet结果集,只会返回执行结果int[] 查看详情

如何超时 java.sql.ResultSet

】如何超时java.sql.ResultSet【英文标题】:HowtoTimingoutjava.sql.ResultSet【发布时间】:2009-06-2319:29:51【问题描述】:PL/SQl光标由于某种原因被挂起,这使我的应用程序在尝试循环通过ResultSet时挂起。有没有办法处理这个问题,比如如... 查看详情

什么是statement

在默认情况下,同一时间每个Statement对象在只能打开一个ResultSet对象。因此,如果读取一个ResultSet对象与读取另一个交叉,则这两个对象必须是由不同的Statement对象生成的。如果存在某个语句的打开的当前ResultSet对象,则Statement... 查看详情

ResultSet to jTable = java.sql.SQLException: Prepared statement has been finalized

】ResultSettojTable=java.sql.SQLException:Preparedstatementhasbeenfinalized【英文标题】:ResultSettojTable=java.sql.SQLException:Thepreparedstatementhasbeenfinalized【发布时间】:2017-11-1617:06:46【问题描述】:***的朋友!我尝试在select语句中“返回”一个Resul 查看详情

statement的摘要

...常量指示调用getMoreResults时应该关闭以前一直打开的所有ResultSet对象。staticintCLOSE_CURRENT_RESULT该常量指示调用getMoreResults时应该关闭当前ResultSet对象。staticintEXECUTE_FAILED该常量指示在执行批量语句时发生错误。staticintKEEP_CURRENT_RESULT... 查看详情

java中如何获得resultset类型变量存到arraylist里面

解答:譬如用statement得到resultsetrs=statement.executeQuery("你的sql语句");将rs.getString("得到的字段")依次放入Map中(map.put())。之后用list.add(map)。就实现了。要点:主要掌握resultset以及arraylist的具体方法的用法。建议:... 查看详情