1

我创建了一个小型 3 层程序,包括:前端 -> 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();
    }
}

表定义


编号| 姓名 | 电子邮件 | 国家 | 密码

所有 VARCHAR,但 id 为 INT 类型。

4

4 回答 4

4

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

此外,我没有看到任何提交数据的调用,没有任何事务处理。如果您出于这个问题的目的跳过那段代码,那很好;否则这是一个非常重要的步骤(如果一切顺利,则提交,异常情况回滚)

于 2013-01-17T18:35:32.540 回答
2

用于executeUpdate数据库写操作:

preparedStmt.executeUpdate();
于 2013-01-17T18:33:51.320 回答
1

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

于 2013-01-17T19:27:38.423 回答
0

还有,为什么st = con.createStatement();

为什么你的查询中有一个前导空格?

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

这个领先的空间可能重要也可能不重要......

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

于 2013-01-17T18:41:05.443 回答