2017-05-24 4 views
0

저장 프로 시저를 실행하고 둘 이상의 행이 반환 될 때 결과를 수집 할 수 있습니다. 그러나 프로 시저가 1 행을 반환하면 ResultSet.next()는 항상 false를 반환하므로 해당 데이터를 가져올 수 없습니다. 왜 이런 일이 일어나는가?Java SQL 저장 프로 시저 ResultSet은 1 행만 포함하는 결과에서 데이터를 가져올 수 없습니다.

List<Panel> panels = new ArrayList<>(); 
    try { 
     String SPsql = "EXEC [dbo].[CR_Pick_Trim_Route] ?"; 
     Class.forName("net.sourceforge.jtds.jdbc.Driver").newInstance(); 
     Connection conn = DriverManager.getConnection("jdbc:jtds:sqlserver://database", "username", "password"); 
     CallableStatement ps = conn.prepareCall(SPsql); 
     ps.setEscapeProcessing(true); 
     ps.setQueryTimeout(300); 
     ps.setString(1, route); 

     boolean hadResults = ps.execute(); 

     while (hadResults) 
     { 
      ResultSet reset = ps.getResultSet(); 

      while (reset.next()) { 
       String route_name = reset.getString("route_name"); 
       String order_no = reset.getString("order_no"); 
       String product = reset.getString("pick_comp"); 
       String drop_no = reset.getString("drop_no"); 
       String desc = reset.getString("long_description"); 
       String analysisA = reset.getString("analysis_a"); 
       String consumer = reset.getString("comp_cons"); 
       String warehouse = reset.getString("pick_wh"); 
       String key = reset.getString("Key"); 
       int total = reset.getInt("pick_qty"); 
       String scanned = reset.getString("Scanned"); 
       String picked = reset.getString("picked"); 
       String original = reset.getString("original"); 

       Panel p = new Panel(route_name, order_no, drop_no, product, desc, analysisA, consumer, warehouse, (!picked.equals("No")), key, total, (scanned.contains("Y")), original); 
       panels.add(p); 
      } 
      hadResults = ps.getMoreResults(); 
     } 

답변