【发布时间】:2021-03-05 14:06:17
【问题描述】:
当我尝试将我的 JTable/JTextFields 更新到我的 SQL 数据库中时,对话框中有这个错误代码:java.sql.SQLException: No value specified for parameter 5。
我在网站上检查过类似的问题,但似乎没有解决我的问题的方法。我已经检查了数据库,我已经检查了我的连接代码,更新代码并且找不到这个额外的参数导致问题应该在哪里?请帮助一个新的初学者!
所以现在我明白问题出在WHERE id=?,正如我所怀疑的那样,但我的 id 仅作为我的 SQL DB 中的行数/主键存在,因此它会根据您选择的行而有所不同/点击,所以我不能事先在pst.setInt(5, ? ) 上设置一个特定的值。然后插入什么 - 这样我就不会丢失 JTable 中我的客户列表上的自动行数?
//This method contains all codes for database connection.
private void upDateDB() {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/num klienter", "root", "");
PreparedStatement pst = con.prepareStatement("SELECT * FROM klient");
ResultSet rs =pst.executeQuery();
ResultSetMetaData StData = rs.getMetaData();
q = StData.getColumnCount();
DefaultTableModel RecordTable = (DefaultTableModel)table.getModel();
RecordTable.setRowCount(0);
while(rs.next()){
Vector<String> columnData = new Vector<String>();
for (i = 1; i <= q; i++) {
columnData.add(rs.getString("id"));
columnData.add(rs.getString("Name"));
columnData.add(rs.getString("Birthday"));
columnData.add(rs.getString("Description"));
columnData.add(rs.getString("Other"));
}
RecordTable.addRow(columnData);
}} catch (Exception ex) {
JOptionPane.showMessageDialog(null, ex);
}}
updateButton.addActionListener(new ActionListener() {
public void actionPerformed (ActionEvent arg0) {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost/num klienter", "root", "");
PreparedStatement pst = con.prepareStatement("UPDATE klient SET Name=?,Birthday=?,Description=?,Other=? WHERE id=?");
table.getSelectedRow();
pst.setString(1, nameTxt.getText());
pst.setString(2, dayTxt.getText()+"-" + monthTxt.getText()+"-" + yearTxt.getText());
pst.setString(3, descriptionTxt.getText());
pst.setString(4, otherTxt.getText());
pst.executeUpdate();
JOptionPane.showMessageDialog(null, "Updated in database");
upDateDB();
}catch (Exception ex){
JOptionPane.showMessageDialog(null, ex);
}
【问题讨论】:
-
你的更新sql语句中有5个
?,但只设置了4个参数。 -
@OHGODSPIDERS 在发布此问题之前我已经尝试过删除?在 WHERE id=" 之后标记 = 但是我又遇到了另一个错误,不允许我这样做。我是否应该删除 = 符号才能让它工作呢?我不记得我是否已经尝试过了。
-
我现在记得它会将所有行更新为相同,如果我删除两个 =?
标签: java error-handling sql-update sqlexception