Java 准备语句不执行

标签 java mysql database prepared-statement

我创建了一个小型的 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/

相关文章:

Java - 新点,距纬度/经度点的 X 距离

php - 如何对网站进行维护?

Swift 数据库检索数据

mysql - 运行查询时没有结果(空白)- 试图从 3 个表中得出结果

mysql - 如何在元组关系演算中实现sql "where not in"?

c# - 数据库连接C#

java - 如何使用嵌入的 JPA 和 JavaDB 从 Java 代码创建数据库表?

Java-MongoDB 将数组转换为 MongoCollection

java - 如何强制(至 1.2.0)OSGi XMLNS 用于 OSGi R7 元类型注释

php - Laravel - 仅选择连接表中的指定列