2013-10-22 162 views
0

我有一個有兩個字符串列表的類。包含字符串列表的對象

public class School { 
private List<String> students; 
private List<String> teachers; 
//getters and setters 
} 

我在我的DAO類中有以下方法,其中學校對象正在填充。

public static School fetchSchoolInfo(String schoolName) throws SQLException 
{  
    School school = null; 
    Connection connection = null; 
    PreparedStatement statement = null; 
    ResultSet rs = null; 
    List<String> students = new ArrayList<String>(); 
    List<String> teachers = new ArrayList<String>();   
    try { 
     connection = createConnection(); 
     statement = connection.prepareStatement("SELECT COL_STUDENT,COL_TEACHERS FROM SCHOOL WHERE SCHOOLNAME=?"); 
     statement.setString(1, schoolName); 
     rs = statement.executeQuery(); 
     while(rs.next()) 
     { 
      school = new School();        
      students.add(rs.getString(1)); 
      teachers.add(rs.getString(1)); 
      school.setStudents(students); 
      school.setTeachers(teachers);    
     }      
    } finally{ 
     rs.close(); 
     statement.close(); 
     connection.close(); 
    } 

    return school; 
} 

現在,如果我這樣做,

School school = MyDAO.fetchPersonDeviceIdInfo("SJSU"); 
System.out.println(school); 

請問學校有對象的SJSU所有的信息?我知道我可以在理想情況下自行嘗試並檢查,但我的應用程序非常複雜,並且需要一段時間才能將此代碼與我的應用程序集成。請建議。另外,我需要一個字符串嗎?

非常感謝!

+1

COL_TEACHERS是第二列,所以你需要'teachers.add(rs.getString(2));'。 'school = new School()'應該在while循環之前,'school.setStudents()'和'school.setTeachers()'應該在while循環之後。在嘗試關閉它們之前,您可能還想檢查連接,語句,結果集對象是否爲空。 – Nishan

+0

teachers.add(rs.getString(1));應該是teachers.add(rs.getString(2)); – Thihara

+0

答案實際上取決於表結構。請發佈這些細節。 – Thihara

回答

5

變化如下:

while(rs.next()) 
    { 
     school = new School();        
     students.add(rs.getString(1)); 
     teachers.add(rs.getString(1)); 
     school.setStudents(students); 
     school.setTeachers(teachers);    
    } 

school = new School(); 
while(rs.next()) 
    { 

     students.add(rs.getString(1)); 
     teachers.add(rs.getString(2)); // changed 

    } 

school.setStudents(students); 
school.setTeachers(teachers); 
+0

把'teachers.add(rs.getString(1));'改爲'teachers.add(rs.getString(2));' – Nishan

+0

當然。實例化while循環中的對象與外部之間的區別是什麼?我在網上看到幾個例子,它們在內部實例化,因此對於結果集中的每一行,都會創建一個新對象,以便對象具有所有記錄,而不僅僅是最後一個。你能解釋一下這個區別嗎? – rickygrimes

+0

是的,:)。 Bt的OP說,他提到它2這是一個錯字這裏.. –

1

重寫你的School.toString()方法這樣

class School { 
    private List<String> students; 
    private List<String> teachers; 
    @Override 
    public String toString() { 
     return "School [students=" + students + ", teachers=" + teachers + "]"; 
    } 
} 

然後嘗試

School school = MyDAO.fetchPersonDeviceIdInfo("SJSU"); 
System.out.println(school); 
+0

當然。謝謝ByteCode。我只是想確定是否需要重寫。 – rickygrimes

相關問題