【发布时间】:2016-12-18 14:55:52
【问题描述】:
我在返回数据库中的 NEXT 记录时遇到了一些问题,我的代码目前只返回最后输入的记录。我尝试创建一个 List/ArrayList 的实例,尝试向我的 createStatement(); 添加语句,然后尝试了所有方法。我在网上搜索过,但是,我似乎总是得到最后一个返回的值。我希望是否有人可以帮助我。我正在使用 .Swing,这一切都在 ActionListener 中执行。
基本上我希望这个函数能够获取数据库中的下一条记录。而不是返回最后一条记录。
nextEmployee.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Connection connection = null;
Statement statement = null;
try {
Class.forName("org.sqlite.JDBC");
connection = DriverManager.getConnection("jdbc:sqlite:employeeDatabase.sqlite");
connection.setAutoCommit(false);
System.out.println("Read operation - database successfully opened");
statement = connection.createStatement(ResultSet.TYPE_FORWARD_ONLY,
ResultSet.CONCUR_READ_ONLY);
ResultSet resultset = statement.executeQuery( "SELECT * from employees" );
while (resultset.next()) {
ArrayList<Employee> selectAllEmployees = new ArrayList<Employee>();
String id = resultset.getString("id");
String name = resultset.getString("name");
String email = resultset.getString("email");
String gender = resultset.getString("gender");
String dob = resultset.getString("dob");
String Address = resultset.getString("address");
String Postcode = resultset.getString("Postcode");
String NIN = resultset.getString("NIN");
String JobTitle = resultset.getString("JobTitle");
String StartDate = resultset.getString("StartDate");
String Salary = resultset.getString("Salary");
idTextField.setText(id);
nameTextField.setText(name);
genderTextField.setText(gender);
dobTextField.setText(dob);
addressTextField.setText(Address);
postcodeTextField.setText(Postcode);
ninTextField.setText(NIN);
jobtitleTextField.setText(JobTitle);
startdateTextField.setText(StartDate);
salaryTextField.setText(Salary);
emailTextField.setText(email);
}
resultset.close();
statement.close();
connection.close();
} catch ( Exception e1 ) {
System.err.println( e1.getClass().getName() + ": " + e1.getMessage() );
System.exit(0);
}
}});
感谢您的时间和精力。
【问题讨论】:
-
您正在迭代整个结果集,并且实际上只显示最后一个结果集(因为您在每次迭代时更新您的 GUI 字段)。您需要填充
selectAllEmployees列表并将其用作 GUI 中的数据源,或者您需要将结果集的迭代移动到您的 GUI(顺便说一句,这可能并不总是正确的解决方案!)。跨度> -
@MarkRotteveel 对,这是有道理的。但是,由于 selectAllEmployees 在公共 void 内,我不能使用语句 return selectAllEmployees.add();我只是得到一个错误。
-
@MarkRotteveel 我尝试使用 selectAllEmployees.add(resultset.getString("id"));但是,.add 关键字似乎有问题。 ArrayList
类型中的方法 add(Employee) 不适用于参数 (String)。它建议更改为 addAll() 但是,当我这样做时,我会遇到相同的错误,建议更改为 add()。 -
当然这不起作用:您创建了一个应该包含
Employee对象的列表,当然您不能向其中添加String。因此:使用结果集中的值创建一个员工对象,将其添加到列表中,等等。然后:返回:这是您的代码,您需要更改它以执行您需要的功能。 -
如何将结果集中的值附加到我的员工列表中? selectAllEmployees.add(resultset.getString(1));?这是我真正苦苦挣扎的部分。