2013-12-12 2 views
1

Я написал метод для копирования внешних данных Mysql в мою текущую базу данных как DAD учащихся. Когда я пишу в текущую базу данных непосредственно на уровне персистентности, я получаю правильные результаты, но если я верну список, чтобы использовать его в логическом слое, происходят странные вещи, и поле «курсы» студентов с тем же именем будет таким же, он должен быть другим.Странное поведение при возврате списка из вызова базы данных Mysql

Кто-нибудь еще испытал странное поведение при возврате списков из базы данных?

Вот мой код:

List<Student> fetchlist = new ArrayList<Student>(); 

    try { 
     //Connecting to external DB 
     Class.forName("com.mysql.jdbc.Driver"); 
     Connection connect = DriverManager.getConnection(dbstring); 

     //GET STUDENTS 
     Map<String, Student> studentMap = new HashMap<String, Student>(); 
     Statement statementStudents = connect.createStatement(); 
     ResultSet resultSetStudents = statementStudents.executeQuery("select * from students2"); 

     while (resultSetStudents.next()) { 
      Student student = new Student(); 

      String sid = resultSetStudents.getString("sid"); 

      String firstname = resultSetStudents.getString("firstname"); 
      String lastname = resultSetStudents.getString("lastname"); 
      String email = resultSetStudents.getString("email"); 

      student.setFirstname(StringEscapeUtils.unescapeHtml(firstname)); 
      student.setName(StringEscapeUtils.unescapeHtml(lastname)); 
      student.setEmail(email); 

      studentMap.put(sid, student); 
     } 


     Statement statementBookings = connect.createStatement(); 
     ResultSet resultSetBookings = statementBookings.executeQuery("select * from bookings2"); 

     //Go through bookings in order to complete Student and add 
     while (resultSetBookings.next()) { 
      String cid = resultSetBookings.getString("cid"); 
      String sid = resultSetBookings.getString("sid"); 

      String course = ""; 

       if (cid.equals("1521")) 
        course = "Course 1"; 
       else if (cid.equals("1522")) 
        course = "Course 2"; 
       else if (cid.equals("1523")) 
        course = "Course 3"; 
       else if (cid.equals("1524")) 
        course = "Course 4"; 

       Student student = studentMap.get(sid); 

       student.setCourse(course); 

       fetchlist.add(student); 

     } 
    } catch (ClassNotFoundException e) { 
     log.error("Could not find Mysql JDBC class"); 

    } catch (SQLException e) { 
     log.error("Error executing SQL statement"); 
    } 

    return fetchlist; 
+1

Имеет ли класс ученика методы hashMap и equals? Если не создать его и повторить тест. –

+0

какой хэш? Студент является DAO и должен быть сериализуемым. – javanoob

+0

Я предполагаю, что вы имеете в виду это: http://stackoverflow.com/questions/27581/overriding-equals-and-hashcode-in-java – javanoob

ответ

0

Для списка добавляющего я создал новые объекты универсиады и наполнил их с данными объектов из HashMap. Также, когда это возможно, я закрыл все свои высказывания и результаты. Тогда у меня больше не было никаких неправильных данных в списке.

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