2009-12-17 5 views
0

J'ai cette méthode dans ma base de données class.and Je veux obtenir une partie des données d'une colonne qui est « dateOfBirth » dans le tableau MySQL, mais je ne sais pas pourquoi le list.size() est "0" mais quand j'utilise System.out.println() dans mon code il montrera juste la première ligne de la table sql, bien que j'aie deux lignes !!!sql et base de données

ma méthode:

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); 

      } 

     } 
    } 

il retournera « 0 » pour tous « si » la situation, mais le System.out.println(), spectacles [2006] qui est l'un de l'année de la colonne de ma ligne, bien que J'ai deux rangs qu'il doit montrer [2006,2009] .mais pas !!!

+0

@ vinaigre, merci, ça va bien, mais je ne sais pas comment un code qui fait un sens ??? vraiment, je ne sais pas et je viens d'écrire un code, mais je ne connais pas les règles d'écriture d'un bon code. [:-(] – Johanna

+0

Cela peut être un bon début http://www.equivalence.co. uk/archives/101. Ensuite, prenez quelques livres comme Clean Code par Robert C. Martin, et Refactoring par Martin Fowler, etc. Ce n'est pas si difficile. –

Répondre

1

Maintenant, essayez ce code et faites le nous savoir. À votre santé.

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);      

    } 

Assez refactoring pour l'instant. Essayez de faire plus pour vous-même. Par exemple,

  • regarder dans commons-lang StringUtils pour remplacer le contrôle nul,
  • utilisation objet Date à des dates de magasin et utiliser rs.getDate() au lieu,
  • vous pouvez utiliser l'objet de calendrier pour obtenir l'année dehors. Ou même objet SimpleDateFormat fonctionnerait trop
  • etc ...
Questions connexes