2009-12-17 4 views
0

У меня есть этот метод в моей базе данных class.and Я хочу получить часть данных из столбца, который является «dateOfBirth» в таблице MySQL, но я не знаю, почему list.size() является «0», но когда я использую System.out.println() в моем коде, он покажет только первую строку таблицы sql, хотя у меня есть две строки !!!sql и database

мой метод:

public static int getBirthPercent(String i) throws SQLException { 
    Statement stmt = conn.createStatement(); 
    List<String> list = null; 
    if (i.equals("O")) { 


     ResultSet rst = stmt.executeQuery("SELECT dateOfBirth from birthtable"); 
     while (rst.next()) { 
      String s1 = rst.getString(1); 
      if (rst.wasNull()) { 
       s1 = null; 
      } 
      String s2 = s1.substring(s1.length() - 4); 
      int s3 = Integer.parseInt(s2); 
      if (list == null && s3 < 1970) { 
       list = new ArrayList<String>(); 
       list.add(s2); 

      } else { 
       list = new ArrayList<String>(0); 

      } 

     } 


    } 
    if (i.equals("N")) { 

     ResultSet rst = stmt.executeQuery("SELECT dateOfBirth from birthtable"); 
     while (rst.next()) { 
      String s1 = rst.getString(1); 
      if (rst.wasNull()) { 
       s1 = null; 
      } 
      String s2 = s1.substring(s1.length() - 4); 
      int s3 = Integer.parseInt(s2); 
      if (list == null && s3 > 2000) { 
       list = new ArrayList<String>(); 
       list.add(s2); 
       System.out.println(list); 

      } else { 
       list = new ArrayList<String>(0); 

      } 

     } 
    } 

возвращает «0» для всех «если» ситуация, но System.out.println(), показывает [2006], которая является одной из года колонки моего Роу, хотя У меня есть два ряда, которые он должен показать [2006,2009]. Но это не так !!!

+0

@ Уксус, спасибо, она идет хорошо, но я не знаю, как можно это код, который делает чувство ??? действительно, я не знаю, и я просто пишу код, но я не знаю правил написания хорошего кода. [:-(] – Johanna

+0

Это может быть хорошим началом http://www.equivalence.co. uk/archives/101. Тогда возьмите некоторые книги, такие как «Чистый код» Роберта К. Мартина и «Рефакторинг» Мартина Фаулера и т. д. Это не так сложно. –

ответ

1

Теперь попробуйте этот код и сообщите нам. Приветствия.

public static int getBirthPercent(String i) throws SQLException { 

    Statement stmt = conn.createStatement(); 
    ResultSet rst = null; 
    List<String> list = new ArrayList<String>(); 
    if (i.equals("O")) { 
     rst = stmt.executeQuery("SELECT dateOfBirth from birthtable"); 
     while (rst.next()) { 
      String s1 = rst.getString(1); 
      if (s1 != null && !s1.isEmpty()) { 
       String s2 = s1.substring(s1.length() - 4); 
       int n = Integer.parseInt(s2); 
       if (n < 1970) { 
       list.add(s2);      
       } 
      } 
     } 
    } 
    if (i.equals("N")) { 
     rst = stmt.executeQuery("SELECT dateOfBirth from birthtable"); 
     while (rst.next()) { 
      String s1 = rst.getString(1); 
      if (s1 != null && !s1.isEmpty()) { 
       String s2 = s1.substring(s1.length() - 4); 
       int n = Integer.parseInt(s2); 
       if (n > 2000) { 
       list.add(s2); 
       } 
      } 
     } 
    } 

    System.out.println(list);      

    } 

Достаточно рефакторинг на данный момент. Постарайтесь сделать больше для себя. Например,

  • посмотреть в достоянию-Ланг StringUtils заменить нулевую проверку,
  • использование Дата объекта хранения дат и использовать rs.getDate() вместо
  • вы можете использовать объект Calendar, чтобы получить год. Или даже SimpleDateFormat объект будет работать слишком
  • и т.д ...