2014-02-12 19 views
4

我不能做进一步的过程,因为我在运行此代码时关闭了ResultSet。我在sqlite数据库表的第15行后面添加值,我想查找15行的平均值,并且应该存储在ArrayList中。java.sql.SQLException:ResultSet关闭

下面是代码: -

try { 
    Class.forName("org.sqlite.JDBC"); 
    c = DriverManager.getConnection("jdbc:sqlite:test.db"); 
    c.setAutoCommit(false); 
    System.out.println("Opened database successfully3"); 
    stmt = c.createStatement(); 
    rs = stmt 
      .executeQuery("SELECT TIME,BID,ASK FROM '" + title + "' ;"); 
    System.out.println("Opened database successfully 20"); 
    while (rs.next()) { 
     i++; 
     System.out.println(i); 
     if (i > 15) { 
      System.out.println("i am in"); 
      List<String> stocklist = new ArrayList<String>(); 
      String main = rs.getString(1); 
      System.out.println(rs.getString(1)); 
      String s[] = main.split(" ", 2); 
      String date = s[0]; 
      String time = s[1]; 
      stocklist.add(date); 
      stocklist.add(time); 
      stocklist.add(df.format(rs.getFloat("BID"))); 
      stocklist.add(df.format(rs.getFloat("ASK"))); 
      rs1 = stmt 
        .executeQuery("SELECT ASK FROM '" + title + "' ;"); 
      int j = 1; 
      while (rs1.next()) { 
       if (j < i) { 
        System.out.println(rs1.getFloat("ASK")); 
        avg = avg + rs1.getFloat("ASK"); 
       } 
       j++; 
      } 
      rs1.close(); 

      System.out.println("i am out"); 
      avg = avg/15; 
      changepercent = ((rs.getFloat("ASK") - avg)/avg) * 100; 
      stocklist.add(df.format(changepercent)); 
      stocklist.add("ETE"); 
      stocklist.add("HUN"); 
      stocklist.add("ALU"); 
      stocklist.add("ETE"); 
      stocklist.add("HUN"); 
      stocklist.add("ALU"); 
      stocklist.add("ETE"); 
      stocklist.add("HUN"); 
      hntm.addRow(stocklist); 
     } 
    } 
    rs.close(); 
    stmt.close(); 
    c.close(); 
} catch (Exception e) { 
    System.err.println(e.getClass().getName() + ": " + e.getMessage()); 
    System.exit(0); 
} 
+0

更换rs1 = stmt.executeQuery("SELECT ASK FROM '" + title + "' ;");尝试创建内部的RS1 –

+0

非常感谢,它的工作... WOW – Laxmeena

回答

8

你不应该重用的声明。当你创建一个新的查询时,你需要使用一个新的Statement对象。与rs1=c.createStatement().executeQuery("SELECT ASK FROM '" + title + "' ;");

+0

感谢名单环路另一份声明中,我已经按照你的工作做了.. – Laxmeena

+0

谢谢,我不知道这工作 –