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

Posted 飞出四季做的茧

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于ResultSet连续通过Statement赋值,会出现错误的主要内容,如果未能解决你的问题,请参考以下文章

JDBC学习笔记——Statement和ResultSet

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

JDBC中的ResultSet

在Java中 Connection、Statement、ResultSet 、PreparedSta

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

execute,executeQuery,executeUpdate