2013-10-22 163 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

相关问题