Java 是否仍然可以使用来自两个不同表的两个不同外键将数据插入表中?

Java 是否仍然可以使用来自两个不同表的两个不同外键将数据插入表中?,java,database,jsp,servlets,prepared-statement,Java,Database,Jsp,Servlets,Prepared Statement,我在将数据从jsp插入数据库时遇到问题。我有三张桌子: 图书(bookid)、用户(id)、评论(b_id、u_id)、外键b_id、u_id参考上述2个表。以下是我目前的代码: 爪哇 问题在于: "...where BookID = '" + b_id + "')..." statement.setInt(4, model.getBookid()); statement.setInt(5, model.getUserid()); 设置参数的数量和问号必须匹配。 您尝试将其绑定为命名参数,但

我在将数据从jsp插入数据库时遇到问题。我有三张桌子:

图书(bookid)、用户(id)、评论(b_id、u_id)、外键b_id、u_id参考上述2个表。以下是我目前的代码:

爪哇

问题在于:

"...where BookID = '" + b_id + "')..."

statement.setInt(4, model.getBookid());
statement.setInt(5, model.getUserid());
设置参数的数量和问号必须匹配。 您尝试将其绑定为命名参数,但在sql中,您只需将空字符串绑定到它。 因此,要么删除上面的参数设置行,然后填充字符串变量,如

String b_id=mode.getBookId()
或者使用“?”的占位符:
。。。其中BookID=


(使用后一个,第一个容易受到sql注入的攻击)

您尝试过使用事务吗?获取连接,将自动提交设置为false,执行多个插入,调用commit()。在打开数据库连接、准备语句或获取结果集(查找)时,请使用try with resources,以避免数据库资源泄漏。查询中只有3个问号。但你要传递5个参数。下一次,不要说“我有麻烦了”,而是发布异常的准确完整的堆栈跟踪。错误消息应该被读取,而不是忽略。他们会告诉你问题出在哪里,这样你就不用猜了。
String b_id=mode.getBookId()