2013-11-09 4 views
0

У меня есть фрагмент кода Java здесь, который должен извлекать результаты из запроса базы данных, и ResultSet должен выполнять итерацию по значениям, чтобы получить определенные данные API для каждой записи ResultSet. Однако проблема заключается в том, что я могу получить данные API только для первой записи моего ResultSet.Looping через базу данных 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' где-то внутри'/* ДЕЛОВЫЕ ВЕЩИ С РЕЗУЛЬТАТОМ РЕЗУЛЬТАТОВ */'? Или код, который вы предоставили, все есть? Если вы прокомментируете код ниже 'String api_url ...' вплоть до закрывающей скобки цикла, будут ли возвращены все записи (используйте регистратор, чтобы узнать, сколько записей будет возвращено)? –

+0

Как только я получаю результаты API для определенной записи, ссылок на ResultSet больше нет. После этого обрабатывается только ответ JSON от API. Я проверяю записи, полученные с помощью регистратора. –

+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(); 
    } 

Затем вы должны построить ULRs и запросить внешнюю службу, используя этот список, после результирующем (и, возможно, соединение) закрывается.

Смежные вопросы