Java Prepared语句未执行

我创建了一个小的3层程序,包括:前端 – > servlet – >数据库。

前端我在表格中输入一些细节。 它们被传递给一个servlet,它将呈现一些HTML并显示输入到表单中的值,同时还调用一个DatabaseHelper类。 然后,DatabaseHelper将这些相同的值连接并插入表中。

我知道值正在传递给servlet类ok,因为它们正在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 | 名字| 电子邮件| 国家| 密码

除了id之外的所有VARCHAR,类型为INT。

您应该在语句对象上调用方法executeUpdate()

此外,我没有看到任何调用提交数据,任何事务处理。 如果你为了这个问题而跳过那段代码就没关系了; 否则这是一个非常重要的步骤(如果一切顺利,则提交,exception场景的回滚)

使用executeUpdate进行数据库写操作:

 preparedStmt.executeUpdate(); 

答案:数据库ID未设置为自动增量。 由于某种原因,这不允许您将数据插入表。 感谢ChadNC指出这一点。

另外,为什么st = con.createStatement();

为什么你的查询中有一个领先的空间?

 String query = " INSERT INTO user_information (name, email, country, password)" + " VALUES (?, ?, ?, ?)"; 

这个领先的空间可能或不重要……

最后,您应该在使用try-with-resources或finally块时关闭连接。