java - 列表中的用户定义对象未正确迭代

标签 java jdbc

在此示例代码中,我从数据库获取两条记录,然后将这些数据设置为放入 ArrayListsmsDTO 对象。如果我在另一个类中迭代这个 ArrayList ,最后一条记录打印两次而不是第一条记录。

数据库类

 public ArrayList<SmsDTO> getReulst() {
                ResultSet rs = null;
                Connection conn = null;
                PreparedStatement pstmt = null;
                ArrayList<SmsDTO> ar=new ArrayList<SmsDTO>() ;
                SmsDTO sms = new SmsDTO();
                try {

                    conn = getConnection();
                    String query = "select pt.P_MOBILE,st.S_FIRSTNAME,st.REF_ID  from parent_info pt join student_info st on pt.REF_ID = st.REF_ID  where st.S_CLASS_TO_JOIN = 10;";

                    pstmt = conn.prepareStatement(query); // create a statement
                    rs = pstmt.executeQuery();
                    // extract data from the ResultSet
                    while (rs.next()) {

                        long phone = rs.getLong(1);
                        sms.setPhone(phone);
                        String student_name = rs.getString(2);
                        sms.setStudentname(student_name);
                        String ref = rs.getString(3);
                        sms.setRef(ref);
                        ar.add(sms);

                    }
                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    try {
                        rs.close();
                        pstmt.close();
                        conn.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
                return ar;
            }
        }

另一类

method()
{
    ArrayList<SmsDTO> lhst = null;
    try {
        lhst = db.getReulst();
        for (Iterator iterator = lhst.iterator(); iterator.hasNext();) {
            SmsDTO smsDTO = (SmsDTO) iterator.next();
            System.out.println(smsDTO.getStudentname());
        }
}

最佳答案

public ArrayList<SmsDTO> getReulst() {
        ResultSet rs = null;
        Connection conn = null;
        PreparedStatement pstmt = null;
        ArrayList<SmsDTO> ar = new ArrayList<SmsDTO>();
        SmsDTO sms = null;
        try {

            conn = getConnection();
            String query = "select pt.P_MOBILE,st.S_FIRSTNAME,st.REF_ID  from parent_info pt join student_info st on pt.REF_ID = st.REF_ID  where st.S_CLASS_TO_JOIN = 10;";

            pstmt = conn.prepareStatement(query); // create a statement
            rs = pstmt.executeQuery();
            // extract data from the ResultSet
            while (rs.next()) {
                sms = new SmsDTO();
                long phone = rs.getLong(1);
                sms.setPhone(phone);
                String student_name = rs.getString(2);
                sms.setStudentname(student_name);
                String ref = rs.getString(3);
                sms.setRef(ref);
                ar.add(sms);

            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                rs.close();
                pstmt.close();
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return ar;

    }
}

关于java - 列表中的用户定义对象未正确迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38609528/

相关文章:

java - 你如何在 Eclipse 中设置实例断点?

java - ClassNotFoundException com.mysql.jdbc.Driver

java - jOOQ:在更新中排除列

java - 具有多个条件的 Hibernate Join 表,但 @WhereJoinTable 不起作用

java - 在mySQL数据库中存储ArrayList对象数据

java - 自定义 validator 是否可以根据 hibernate validator 中验证失败的内容有多条消息?

java - 如何在列表中的每第 n 个位置添加新行?

java - 使用 JDBC 连接器 5.1 从 Java 读取/写入 MySQL 中的 UTF-8 数据时出现问题

java - preparedStatement.getBigDecimal 其中值为 null

java - 无法从 CentOS 8 服务器使用 MS JDBC 驱动程序连接到 SQL Server 服务器 : SSL error but not using secure connection