2017-03-11 6 views
0

私は選択クエリを実行するためにjavaで2つのメソッドを持っています。 query1が値を返さない場合はfunction2が実行されます。しかし、私の問題はquery 2であり、私は空の結果セットを取得しています。 DBツールで同じクエリ(query 2)を実行すると、いくつかの行が表示されますが、コードではnullが返されます。javaで複数の選択クエリ - 何も返さない(query2から)

public class FetchData2 { 

    private static Connection connection = null; 


    public static Connection getConnection() { 

     System.out.println("initial connection "+connection); 

     if (connection != null) 
      return connection; 
     else { 
      // DB Connection 
      try 
      { System.out.println("i am inside connection");    
       Class.forName("oracle.jdbc.driver.OracleDriver"); 
       connection = DriverManager.getConnection("connection"); 
       System.out.println("Connection estabilished"+connection); 
      }catch (Exception e){ 
       System.out.println("Connection error1: "+e); 
      } 
      return connection; 
     } 
    } 

    public static ArrayList<Elements2> getAllElements2(String sino,String irepno) {  
     connection = FetchData2.getConnection(); 
     ArrayList<Elements2> itemListinsp = new ArrayList<Elements2>();  

     try { 
      Statement statement1=connection.createStatement(); 
      ResultSet rs = statement1.executeQuery("query1"); 


      while(rs.next()) { 
       Elements2 iteminsp=new Elements2(); 
       iteminsp.setParameters(rs.getString("parameters")); 
       iteminsp.setSpecifications(rs.getString("specifications")); 
       iteminsp.setActual1(rs.getString("actual1")); 
       iteminsp.setActual2(rs.getString("actual2")); 
       iteminsp.setActual3(rs.getString("actual3")); 
       iteminsp.setActual4(rs.getString("actual4")); 
       iteminsp.setActual5(rs.getString("actual5")); 
       itemListinsp.add(iteminsp); 
      } 

     con.close(); // added these lines 
     rs.close(); 
     ps.close();   
     } catch (Exception e) { 
      System.out.println("Connection query exection error: "+e); 
     } 

     return itemListinsp; 
    } 

    public static ArrayList<Elements2> getcritElements2(String icode) { 
     connection = FetchData2.getConnection(); 
     System.out.println("I AM IN SECOND FETCH"); 
     ArrayList<Elements2> listcrit = new ArrayList<Elements2>(); 

     System.out.println("incoming icode: "+icode); 

     try { 
      Statement statementinsp=connection.createStatement(); 
      ResultSet rsinsp = statementinsp.executeQuery("query2"); 

      if (!rsinsp.next()) { 
       System.out.println("no data"); 
      } 

      while(rsinsp.next()) { 
       Elements2 inspcrit=new Elements2(); 
       inspcrit.setParameters(rsinsp.getString("parameters")); 
       inspcrit.setSpecifications(rsinsp.getString("specifications")); 
       listcrit.add(inspcrit); 
      }    
     } catch (Exception e) { 
      System.out.println("Connection query exection error: "+e); 
     } 
     System.out.println(listcrit.size()); 
     System.out.println(listcrit.get(0).getParameters()); 
     System.out.println(listcrit.get(0).getSpecifications()); 
     return listcrit; 
    } 
} 
+0

ようこそ!私は、このコードの95%があなたの質問に関連していないと思います。あなたの問題を示す[**最小**、完全で実証可能な例](http://stackoverflow.com/help/mcve)を作成してください。 –

答えて

0

あなたはそのために、あなたとあなたのResultSetStatementとあなたのConnectionを閉じる必要があります!

追加:(try-with-resourcesは少なくともバージョン1.7以上のJavaでしか動作しませんが、tryブロック内の例外が発生しても正しい順序でConnection、ResultSetおよびStatementを閉じます) )

public class FetchData2 { 

    public static Connection getConnection() { 

     System.out.println("initial connection "+connection); 

     // DB Connection 
     Connection connection = null; 
     try { 
      System.out.println("i am inside connection");    
      Class.forName("oracle.jdbc.driver.OracleDriver"); 
      connection = DriverManager.getConnection("connection"); 
      System.out.println("Connection estabilished"+connection); 
     } catch (Exception e) { 
      System.out.println("Connection error1: "+e); 
     } 
     return connection; 
    } 
} 

public static ArrayList<Elements2> getAllElements2 (String sino,String irepno) {   
    ArrayList<Elements2> itemListinsp = new ArrayList<Elements2>();  

    try (Connection connection = FetchData2.getConnection(); 
     Statement statement1 = connection.createStatement(); 
     ResultSet rs = statement1.executeQuery("query1")) { 

     while(rs.next()) { 
      Elements2 iteminsp = new Elements2(); 
      iteminsp.setParameters(rs.getString("parameters")); 
      iteminsp.setSpecifications(rs.getString("specifications")); 
      iteminsp.setActual1(rs.getString("actual1")); 
      iteminsp.setActual2(rs.getString("actual2")); 
      iteminsp.setActual3(rs.getString("actual3")); 
      iteminsp.setActual4(rs.getString("actual4")); 
      iteminsp.setActual5(rs.getString("actual5")); 
      itemListinsp.add(iteminsp); 
     }   
    } catch (Exception e) { 
     System.out.println("Connection query exection error: "+e); 
    } 
    return itemListinsp; 
} 

public static ArrayList<Elements2> getcritElements2(String icode) { 
    System.out.println("I AM IN SECOND FETCH"); 
    ArrayList<Elements2> listcrit = new ArrayList<Elements2>(); 

    System.out.println("incoming icode: "+icode); 

    try (Connection connection = FetchData2.getConnection(); 
     Statement statementinsp = connection.createStatement(); 
     ResultSet rsinsp = statementinsp.executeQuery("query2")) { 

     if (!rsinsp.isBeforeFirst()) { 
      System.out.println("no data"); 
     } 

     while(rsinsp.next()) { 
      Elements2 inspcrit=new Elements2(); 
      inspcrit.setParameters(rsinsp.getString("parameters")); 
      inspcrit.setSpecifications(rsinsp.getString("specifications")); 
      listcrit.add(inspcrit); 
     }    
    } catch (Exception e) { 
     System.out.println("Connection query exection error: "+e); 
    } 
    System.out.println(listcrit.size()); 
    System.out.println(listcrit.get(0).getParameters()); 
    System.out.println(listcrit.get(0).getSpecifications()); 
    return listcrit; 
} 

}スタックオーバーフローに

+0

すべてのパラメータを閉じるコードを追加しました。まだ私はnullになっています。私の更新されたコードを確認して、私に見つけてください。 – Elei

+0

'ps.close'とは​​何ですか? 3つのものを正しい順序で閉じる必要があります.1つはResultSet、2つはステートメント、もう1つはConnectionです。しかし、FetchData2では、閉じた古いConnectionを返します。これは、Connectionを閉じても機能しません。だからあなたはいつも新しいConnectionを返さなければなりません! –

+0

貴重な解決に感謝します。 :)できます – Elei

関連する問題