我试图从hashSet集合中打印对象。控制台仅显示最后一个对象(一个对象)。当我以相同的方法使用ArrayList时,我可以打印所有对象。我使用了迭代器方法来打印集合集,请参见所附的测试。
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;
}
答案 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
循环的每次迭代中创建一个新对象。