如何解决java.sql.SQLException: 没有为参数 5 指定值更新数据库
当我尝试将 JTable/JTextFields 更新到我的 sql 数据库时,对话框中出现以下错误代码:means
。
我在网站上查过类似的问题,但似乎没有解决我的问题。我检查了数据库,检查了我的连接代码,更新代码,但找不到这个额外的参数应该在哪里?请帮助新的初学者!
所以现在我明白问题出在我怀疑的 mask
处,但我的 id 仅作为行计数/主键存在于我的 sql 数据库中,因此它会因您的行而有所不同选择/点击,所以我不能在 True
预先设置一个特定的值。然后插入什么 - 这样我就不会丢失 JTable 中客户列表中的自动行计数?
java.sql.sqlException: No value specified for parameter 5
解决方法
Class.forName("com.mysql.cj.jdbc.Driver");
这可以删除。已经 20 年没有必要了。
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/num klienter","root","");
这是内存泄漏;连接已打开,并将永远保持打开状态;您的 SQL 服务器将只允许少数几个打开的连接,因此很快您的 MySQL 服务器将无法被任何服务(包括此 java 代码)访问,直到您杀死关闭连接的 java 应用程序。对您创建的所有资源使用 try with resources。
PreparedStatement pst = con.prepareStatement("SELECT * FROM klient");
这也是一个资源,需要try-with-resources。
ResultSet rs =pst.executeQuery();
你猜对了。第三次尝试资源。如果您发现代码变得笨拙,那么 JDBC 是非常低级的,对于“最终用户”编码来说并不是那么好。使用一个很好的抽象,比如 JDBI 或 JOOQ。
columnData.add(rs.getString("Fødselsdag"));
列名中的非 ASCII 字符?那永远不会顺利。我强烈建议你不要这样做。
q = StData.getColumnCount();
for (i = 1; i <= q; i++) {
这很奇怪。 q 保存列数 - 这是查询中的列数。然后对 5 个列名进行硬编码,因此 q 始终为 5。然后,将所有 5 个值(id、Navn、Fødselsdag 等)相加,然后重复 5 次,总共运行 25 次,然后重复您的数据5次。不清楚您通过询问已知信息(从您已经知道的元数据中获取列数)来尝试完成什么。
PreparedStatement pst = con.prepareStatement("UPDATE klient SET Navn=?,Fødselsdag=?,Beskrivelse=?,Andet=? WHERE id=?");
我数了 5 个 ?
,但只有 4 个 pst.setString
语句。你忘记了pst.setInt(5,theValue)
。
更新代码得到了关于 try-with-resources 的所有相同警告。
pst.setString(2,dayTxt.getText()+"-" + monthTxt.getText()+"-" + yearTxt.getText());
不是您如何使用 DB 进行约会。有一个 pst.setDate
,但最好使用 pst.setObject
,传递 java.time.LocalDate
的实例。 MySQL 是否真的支持 - 不确定,你必须检查。
我的问题的解决方案是为 pst.
插入第 5 个 id=?
语句,如下所示:
pst.setInt(5,table.getRowCount());
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。