【发布时间】:2021-07-01 15:24:49
【问题描述】:
当我尝试通过按钮触发的更新方法更新数据库时遇到 sql 语法问题
这是按钮代码
update.addActionListener(e -> {
int i = table.getSelectedRow();
if (i >= 0) {
model.setValueAt(PackId.getText(), i, 0);
model.setValueAt(PackName.getText(), i, 1);
model.setValueAt(VendorName.getText(), i, 2);
model.setValueAt(PackValue.getText(), i, 3);
try {
updatepacks(PackId,PackName,VendorName,PackValue);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
} else {
System.out.println("Update Error");
}
更新方法代码
public void updatepacks(JTextField PackId, JTextField PackName, JTextField VendorName, JTextField PackValue) throws SQLException {
try{
Connection conn = DriverManager.getConnection("jdbc:sqlite:packsver3.db");
String sqlupdate = "Update packs" + " SET PackName = ?" + " VendorName = ?" + "PackValue = ? " + "Where PackId = ? ";
try (PreparedStatement ps = conn.prepareStatement(sqlupdate)) {
ps.setString(1, String.valueOf(PackId));
ps.setString(2, String.valueOf(PackName));
ps.setString(3, String.valueOf(VendorName));
ps.setString(4, String.valueOf(PackValue));
ps.executeUpdate();
}
} catch (Exception e) {
e.printStackTrace();
}
}
还有错误
【问题讨论】:
-
hmmm,以及开始那些 ps.setString(1, String.valueOf(PackId)); ps.setString(2, String.valueOf(PackName)); ps.setString(3, String.valueOf(VendorName)); ps.setString(4, String.valueOf(PackValue));实际上不匹配的顺序?你有你的SQL语句.....packName应该是第一个,然后是vendorName,等等我建议你实际上检查它们是否为空/null :)
-
你也可以查看
String.valueOf(PackId)的返回值。对我来说,这并不明显返回 JTextField 中包含的文本。