【发布时间】:2018-10-13 22:49:50
【问题描述】:
由于某种原因,我只返回 1 个条目,但我有 2 个待处理用户。
public Set getApplicationStatus() {
DbConn connector = new DbConn();
String Pending = "Pending";
Connection connection = connector.getConnection();
try {
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM `person` WHERE `Department` = '"+Pending+"'");
Set persons = new HashSet();
while (rs.next()) {
Person person = extractUserFromResultSet(rs);
persons.add(person);
}
System.out.println(persons.size());
return persons;
} catch (SQLException ex) {
ex.printStackTrace();
}
return null;
如果我直接在数据库上运行查询,我会得到两个帐户,但如果我通过 ResultSet 我似乎只得到最后一个。
public static Person p = new Person();
public static ArrayList<Person> Users = new ArrayList();
public boolean WriteTOfile() throws IOException {
try (Writer writer = new FileWriter("Output.json")) {
Gson gson = new GsonBuilder().create();
Users = p.getApplicationStatus();
for (Person User : Users) {
String json = gson.toJson(User);
writer.write(json);
}
}
return true;
}
当我写入我的 Json 文件时,它会将最后一行添加两次?
public ArrayList<Person> getApplicationStatus() {
DbConn connector = new DbConn();
String Pending = "Pending";
Connection connection = connector.getConnection();
try {
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM `person` WHERE `Department` = '"+Pending+"'");
ArrayList persons = new ArrayList();
while (rs.next()) {
Person person = extractUserFromResultSet(rs);
persons.add(person);
}
//System.out.println("Persons Size: " + persons.size());
return persons;
} catch (SQLException ex) {
ex.printStackTrace();
}
return null;
}
使用此代码解决的第一个问题
public ArrayList<Person> getApplicationStatus() {
DbConn connector = new DbConn();
String Pending = "Pending";
Connection connection = connector.getConnection();
try {
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM `person` WHERE `Department` = '"+Pending+"'");
ArrayList persons = new ArrayList();
while (rs.next()) {
Person person = extractUserFromResultSet(rs);
persons.add(person);
System.out.println(person);
}
//System.out.println("Persons Size: " + persons.size());
return persons;
} catch (SQLException ex) {
ex.printStackTrace();
}
return null;
}
先返回打印n
public boolean WriteTOfile() throws IOException {
try (Writer writer = new FileWriter("Output.json")) {
Gson gson = new GsonBuilder().create();
Users = p.getApplicationStatus();
for (Person User : Users) {
String json = gson.toJson(User);
System.out.println(json);
writer.write(json);
}
}
return true;
}
第二次返回打印n
private Person extractUserFromResultSet(ResultSet rs) throws SQLException {
person.setId(rs.getInt("ID"));
person.setFName(rs.getString("FName"));
person.setLName(rs.getString("LName"));
person.setDOB(rs.getString("DOB"));
person.setDepartment(rs.getString("Department"));
person.setLocation(rs.getString("Location"));
person.setCellNr(rs.getString("Cellnr"));
person.setUsername(rs.getString("Username"));
person.setPassword(rs.getString("Password"));
return person;
}
【问题讨论】:
-
他们可以是
equal()并返回相同的hashCode()吗?如果是这样,Set 将忽略重复项。 -
我“猜测”
hashCode/equals的实现Person为两行返回相同的值,因此HashSet忽略了第二个结果。尝试改用List(即ArrayList) -
嗯是有道理的。谢谢我试试看。
-
现在它得到 2 但它返回最后一行两次。
-
第一个问题你整理好了吗?如果有怎么办?因为您可能会将最后一行添加两次。因为我没有看到您的写入功能有任何问题。