问题描述
我正在Netbeans中构建一个Java GUI应用程序,用于表示数字耕作系统(或ePOS耕作)。
我需要能够通过jList查看用户列表,以及对其进行修改和删除。 每个用户都是使用User模型类构建的对象,并代表mySQL accdb数据库上的记录。
我已经成功地将用户添加到数据库,并用包含User对象的ArrayList的内容填充了jList,但是我不知道如何从数据库中删除在jList中选择的用户。
以下是从数据库中删除用户的代码:
// removes users from the database
public void removeUser (User dbUser) {
try (Connection conn = setupConnection()) {
// create SQL statement
Statement stmt = conn.createStatement();
// SQL query in string variable
String sql = "DELETE FROM Users " +
"WHERE employee_number = " +
dbUser.getEmployeeNumber();
// execute query on database
stmt.executeUpdate(sql);
} catch (Exception ex) {
String message = ex.getMessage();
System.out.println("dbUser error: " + message);
}
}
我对此有些了解,但是能够通过jList定位特定用户并将其从数据库中删除是我无法理解的事情。
为了清楚起见,除非有要求,否则我不会发布用于添加用户和填充jList的代码。
谢谢。
1楼
我可以使用以下解决方案解决问题:
- 将要删除的列表中的项目索引保存到变量中。
- 通过定位变量,将模型元素放在相同的索引位置。
- 根据所选索引创建用户对象的实例,记住要强制转换User对象类型。
- 最后,删除数据库条目和列表条目。
这是代码:
// validate that an item is selected
if (user_lst.isSelectionEmpty()) {
JOptionPane.showMessageDialog(null, "You haven't selected an account to remove from the list.");
} else {
// target object at list index
int index = user_lst.getSelectedIndex();
// remove object at list index
model.getElementAt(index);
// create instance of user based on selected index
User u = (User) model.getElementAt(index);
if (index < 0) {
System.out.println("jList error: There are no items");
} else {
db.removeUser(u);
model.remove(index);
}
// refresh list model
user_lst.setModel(model);
// confirm user was removed
JOptionPane.showMessageDialog(null, "Account removed");
}