【发布时间】:2019-08-14 19:28:22
【问题描述】:
将数据从 jsp 插入数据库时遇到问题。我有 3 张桌子:
Books(bookid)、Users(id)、Review(b_id,u_id)、外键 b_id、u_id 引用上面的 2 个表。到目前为止,这是我的代码:
java
public void insert(ReviewModel model) {
try {
String b_id = null;
String u_id = null;
String sql = "insert into review (content,datePost,rating,b_id,u_id)\n"
+ "values (?,?,?,(select BookID from Books where BookID = '" + b_id + "'),(select id from Users where id = '" + u_id + "') )";
PreparedStatement statement = connection.prepareCall(sql);
statement.setString(1, model.getContent());
statement.setDate(2, (Date) (model.getDatePost()));
statement.setFloat(3, model.getRating());
statement.setInt(4, model.getBookid());
statement.setInt(5, model.getUserid());
statement.executeUpdate();
} catch (SQLException ex) {
Logger.getLogger(ReviewDAO.class.getName()).log(Level.SEVERE, null, ex);
}
}
【问题讨论】:
-
您是否尝试过使用事务?获取连接,将自动提交设置为 false,进行多次插入,调用 commit()。在打开数据库连接、准备语句或获取结果集(查找)时也要使用 try-with-resources,以避免数据库资源泄漏。
-
您的查询中只有 3 个问号。但是你传递了 5 个参数。下次,不要说“我有麻烦”,而是发布异常的准确和完整的堆栈跟踪。错误消息应该被读取,而不是被忽略。它们会告诉您问题所在以及问题所在,因此您无需猜测。
标签: java database jsp servlets prepared-statement