2013-07-11 2 views
0

У меня есть метод, который возвращает значение запроса ResultSet через объект даты. Недостатком является то, что на моем выходе он возвращает только последнее значение в конкретном столбце. Как мне это сделать?ResultSet, не повторяющиеся значения указанного столбца

public Date getTime(){ 
     Date date = null; 
     DateFormat format; 

     try { 

       Class.forName("com.mysql.jdbc.Driver"); 
       Connection con = DriverManager.getConnection(url, "root", ""); 

       Statement stmt = con.createStatement(); 

       ResultSet result = stmt.executeQuery("SELECT * FROM error_log WHERE service_source = 'Billbox' "); 

       while (result.next()) { //retrieve data 
        String ds = result.getString("error_date"); 
        format = new SimpleDateFormat("M/d/yyyy H:m:s a"); 

        date = (Date)format.parse(ds); 

       } 
       con.close(); 

      } catch (Exception ex) { 
       Logger.getLogger(LogDB.class.getName()).log( 
          Level.SEVERE, null, ex); 
      } 
     return date; 
    } 

Тогда в моем основном методе:

public static void main(String args[]){   
     TestA ea = new TestA(); 
     Date ss = ea.getTime(); 
     System.out.println(ss); 
    } 

Но это только возвращает последнее значение в моем запросе. как я могу распечатать другие (старцы) вместе с ним?

+1

Здравствуйте, gbade, если какой-либо из приведенных выше ответов решает вашу проблему, пожалуйста, примите одно! – Simon

+0

да выберите один и нажмите на крючок в левом углу. –

ответ

2

Вам необходимо заполнить список дат из результатов запроса. Попробуйте следующее:

public List<Date> getTime(){ 
     List<Date> dates = new ArrayList<Date>(); 
     DateFormat format; 

     try { 

      Class.forName("com.mysql.jdbc.Driver"); 
      Connection con = DriverManager.getConnection(url, "root", ""); 

      Statement stmt = con.createStatement(); 

      ResultSet result = stmt.executeQuery("SELECT * FROM error_log WHERE service_source = 'Billbox' "); 

      while (result.next()) { //retrieve data 
       String ds = result.getString("error_date"); 
       format = new SimpleDateFormat("M/d/yyyy H:m:s a"); 

       dates.add((Date)format.parse(ds)); 

      } 
      con.close(); 

     } catch (Exception ex) { 
      Logger.getLogger(LogDB.class.getName()).log( 
         Level.SEVERE, null, ex); 
     } 
     return dates; 
    } 
+0

Пожалуйста, обратитесь к моему комментарию к [этот ответ] (http://stackoverflow.com/a/17596064/1065197) –

+0

После вашего редактирования вы должны вернуть 'List ' вместо 'ArrayList ' иначе код не будет компилироваться. –

+0

Да, я написал этот ответ быстро, но вы правы! – Simon

0

просто:

 List<Date> lDateDb = new ArrayList<Date>(); 
     while (result.next()) { //retrieve data 
       String ds = result.getString("error_date"); 
       format = new SimpleDateFormat("M/d/yyyy H:m:s a"); 

       date = (Date)format.parse(ds); 
       lDateDb.add(date); 
      } 
     return lDateDb; 

изменить тип возвращаемого getTime к List<Date> и изменить основной для:

public static void main(String args[]){   
    TestA ea = new TestA(); 
    List<Date> lAllDate = ea.getTime(); 
    for (Date lDate : lAllDate) 
    System.out.println(lDate); 
} 
+0

Спасибо за ввод. он работает со всеми ответами. Спасибо –

1

Из-за цикла while вы присваиваете последнее значение. Измените метод как

public List<Date> getTime(){ 

Вы можете попробовать

List<Date> dates = new ArrayList<Date>(); 

, а затем внутри вашего время цикла;

while (result.next()) { //retrieve data 
        String ds = result.getString("error_date"); 
        format = new SimpleDateFormat("M/d/yyyy H:m:s a"); 

        date = (Date)format.parse(ds); 
        dates.put(date); 


       } 

return dates; 
+0

Лучше использовать 'List date = new ArrayList ();'. См. [Что означает «программа для интерфейса»?] (Http://stackoverflow.com/q/383947/1065197) –

+0

Вы правы, я отредактировал свой ответ. –

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