打印HashSet集合中的对象

时间:2019-02-05 17:51:29

标签: java hash collections set

enter image description here我试图从hashSet集合中打印对象。控制台仅显示最后一个对象(一个对象)。当我以相同的方法使用ArrayList时,我可以打印所有对象。我使用了迭代器方法来打印集合集,请参见所附的测试。Example of test result

public Set<Coupon> getAllCoupouns() throws Exception {

    Coupon coupon = new Coupon();
    Set<Coupon> coupons = new HashSet<Coupon>();

    // Open a connection
    conn = DriverManager.getConnection(Utils.getDBUrl());
    // Define the Execute query
    java.sql.Statement stmt = null;

    try {
        stmt = conn.createStatement();
        // build The SQL query
        String sql = "SELECT * FROM COUPON";
        // Set the results from the database
        ResultSet resultSet = stmt.executeQuery(sql);
        // constructor the object, retrieve the attributes from the results
        while (resultSet.next()) {

            coupon.setId(resultSet.getLong(1));
            coupon.setTitle(resultSet.getString(2));
            coupon.setStartDate((Date) resultSet.getDate(3));
            coupon.setEndDate((Date) resultSet.getDate(4));
            coupon.setAmount(resultSet.getInt(5));
            CouponType type = CouponType.valueOf(resultSet.getString(6)); // Convert String to Enum
            coupon.setType(type);
            coupon.setMessage(resultSet.getString(7));
            coupon.setPrice(resultSet.getDouble(8));
            coupon.setImage(resultSet.getString(9));

            coupons.add(coupon);

        }

    } catch (SQLException e) {
        throw new Exception("Retriev all the coupons failed");
    } finally {
        // finally block used to close resources
        try {
            if (stmt != null)
                conn.close();
        } catch (SQLException se) {
            // do nothing
        }
        try {
            if (conn != null)
                conn.close();
        } catch (SQLException se) {
            se.printStackTrace();
        }

    }
    return coupons;
}

2 个答案:

答案 0 :(得分:0)

Coupon循环外部初始化while时,每次都会不断添加相同的对象,因此,覆盖结果只会显示最后一个结果。

您需要做的是从Coupon循环中实例化while,例如:

public Set<Coupon> getAllCoupouns() throws Exception {
    Set<Coupon> coupons = new HashSet<Coupon>();

    // Open a connection
    conn = DriverManager.getConnection(Utils.getDBUrl());
    // Define the Execute query
    java.sql.Statement stmt = null;

    try {
        stmt = conn.createStatement();
        // build The SQL query
        String sql = "SELECT * FROM COUPON";
        // Set the results from the database
        ResultSet resultSet = stmt.executeQuery(sql);
        // constructor the object, retrieve the attributes from the results
        while (resultSet.next()) {
            Coupon coupon = new Coupon();
            coupon.setId(resultSet.getLong(1));
            coupon.setTitle(resultSet.getString(2));
            coupon.setStartDate((Date) resultSet.getDate(3));
            coupon.setEndDate((Date) resultSet.getDate(4));
            coupon.setAmount(resultSet.getInt(5));
            CouponType type = CouponType.valueOf(resultSet.getString(6)); // Convert String to Enum
            coupon.setType(type);
            coupon.setMessage(resultSet.getString(7));
            coupon.setPrice(resultSet.getDouble(8));
            coupon.setImage(resultSet.getString(9));

            coupons.add(coupon);

        }

    } catch (SQLException e) {
        throw new Exception("Retriev all the coupons failed");
    } finally {
        // finally block used to close resources
        try {
            if (stmt != null)
                conn.close();
        } catch (SQLException se) {
            // do nothing
        }
        try {
            if (conn != null)
                conn.close();
        } catch (SQLException se) {
            se.printStackTrace();
        }

    }
    return coupons;
}

答案 1 :(得分:0)

cupon始终是同一对象。您仅制作Cupon类的一个对象,因此该集合仅包含一个对象(您始终添加相同的对象)。您必须在while循环的每次迭代中创建一个新对象。