我创建了一个小型的 3 层程序,包括:前端 -> servlet -> 数据库。
前端我在表单中输入一些详细信息。它们被传递给一个 servlet,该 servlet 将呈现一些 HTML 并显示输入到表单中的值,同时还调用一个类 DatabaseHelper。 DatabaseHelper 然后连接并将这些相同的值插入到表中。
我知道这些值正在传递给 servlet 类,因为它们显示在 HTML 中。所以问题一定出在准备好的语句中。问题是,我看不出声明本身有任何错误。当我查询表本身时,那里没有数据。
数据库连接功能正常,因为我可以使用硬编码语句将值插入数据库,而不是准备好的语句。
下面是我使用的声明。非常感谢任何建议。
public void addRegisterDetails(String name, String email, String country, String password, ){
try{
String driver = "com.mysql.jdbc.Driver";
Class.forName(driver).newInstance();
// Make db connection
con = DriverManager.getConnection(url, USERNAME, PASSWORD);
st = con.createStatement();
String query = " INSERT INTO user_information (name, email, country, password)" + " VALUES (?, ?, ?, ?)";
PreparedStatement preparedStmt = con.prepareStatement(query);
preparedStmt.setString (1, name);
preparedStmt.setString (2, email);
preparedStmt.setString (3, country);
preparedStmt.setString (4, password);
preparedStmt.execute();
}catch(ClassNotFoundException ex) {
System.out.println(ex);
}catch(Exception e){
e.printStackTrace();
}
}
表定义
编号|姓名 |电邮 |国家 |密码
除 id 外的所有 VARCHAR,它是 INT 类型。
最佳答案
您应该在语句对象上调用方法 executeUpdate()
。
此外,我没有看到任何提交数据的调用、任何事务处理。如果您为了这个问题的目的而跳过那段代码,那很好;否则这是非常重要的一步(如果一切顺利则提交,异常情况回滚)
关于Java 准备语句不执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14385748/