2013-11-09 21 views
0

我在這裏有一段Java代碼,它應該從數據庫查詢中檢索結果,並且ResultSet應該遍歷值以便爲ResultSet的每個條目檢索某些API數據。 但是,問題是我可以僅檢索ResultSet的第一個條目的API數據。在數據庫中循環ResultSet

此代碼完全按預期工作,並返回所有數據庫條目。

try { 
    ResultSet rs; 
    rs = stat.executeQuery("select * from schedule"); 
    while (rs.next()) { 
     model.addRow(new Object[]{rs.getString("SHOW"), rs.getString("SEASON")}); 
    } 
} catch (Exception e) { 
    console.append(e.getMessage() + '\n'); 
} 

但是,此代碼只返回第一個條目。

try { 
    ResultSet rs = stat.executeQuery("select * from schedule"); 
    while (rs.next()) { 
     String show = rs.getString("SHOW"); 
     String season = rs.getString("SEASON"); 
     String api_url = "<API_URL>/" + show + "/" + season; 

    URL url = new URL(api_url); 
     HttpURLConnection con = (HttpURLConnection) url.openConnection(); 
     con.setRequestMethod("GET"); 
     con.setRequestProperty("User-Agent", USER_AGENT); 
     int responseCode = con.getResponseCode(); 
     if (responseCode == 200) { 
      conn_stat.setText("Connection Status : OK"); 
     } else { 
      conn_stat.setText("Connection Status : ERR"); 
     } 
     BufferedReader in = new BufferedReader(
       new InputStreamReader(con.getInputStream())); 
     String inputLine; 
     StringBuilder response = new StringBuilder(); 
     while ((inputLine = in.readLine()) != null) { 
      response.append(inputLine); 
     } 
     in.close(); 
     String s = response.toString(); 
     JsonArray json = JsonArray.readFrom(s); 
     for (int i = 0; i < json.size(); i++) { 
      JsonObject show_json = json.get(i).asObject(); 
      int episode = show_json.get("episode").asInt(); 
      String date = show_json.get("first_aired_iso").asString(); 
      String title = show_json.get("title").asString(); 
      String date_formatted = date.substring(0, date.indexOf("T")); 
      SimpleDateFormat original = new SimpleDateFormat("yyyy-MM-dd"); 
      SimpleDateFormat target = new SimpleDateFormat("dd-MMM-yyyy"); 
      Date unformatteddate = original.parse(date_formatted); 
      String dateStart = target.format(unformatteddate); 
      Date curr_date = new Date(); 
      String dateStop = target.format(curr_date); 
      Date d1 = null; 
      Date d2 = null; 
      d1 = target.parse(dateStart); 
      d2 = target.parse(dateStop); 
      long diff = d2.getTime() - d1.getTime(); 
      long diffDays = diff/(24 * 60 * 60 * 1000); 
      if (diffDays < 0) { 
       alert_model.addRow(new Object[]{show + " - " + episode, title, dateStart}); 
      } 
     } 
    } 
} catch (Exception e) { 
    console.append(e.getMessage() + '\n'); 
} 
+0

如果您在循環內添加日誌記錄,將打印多少個日誌?只有一個?你在'/ *裏面的某個地方引用了'rs嗎?使用RETRIEVED RESULT * /'做什麼?或者你提供的代碼都是?如果將'String api_url ...'下面的代碼註釋掉直到循環的結束括號,是否將返回所有記錄(使用記錄器查看將返回多少記錄)? –

+0

一旦我得到特定條目的API結果,就不再有對ResultSet的引用。之後,只有來自API的JSON響應被操縱。 我正在檢查使用記錄器返回的記錄。 –

+0

@PrzemyslawKruglej我試着通過評論代碼,它檢索所有的數據。但並非如此。 –

回答

1

嘗試分解你的邏輯。這是您如何創建數據庫中所有節目/季節的列表。

try { 
     ResultSet rs = stat.executeQuery("select * from schedule"); 
     List<String[]> list = new ArrayList<>(); 
     while (rs.next()) { 
      String show = rs.getString("SHOW"); 
      String season = rs.getString("SEASON"); 
      list.add(new String[]{show, season}); 
     } 
    } 
    catch (Exception e) { 
     e.printStackTrace(); 
    } 

然後,您應該構建ULR並在結果集(可能連接)關閉後使用此列表查詢外部服務。