Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 插入sql查询而不是在数据库中插入行_Java_Jdbc - Fatal编程技术网

Java 插入sql查询而不是在数据库中插入行

Java 插入sql查询而不是在数据库中插入行,java,jdbc,Java,Jdbc,我正在db中插入新行,控制台中没有异常。但该行不会插入到表中 String name = request.getParameter("name"); String city = request.getParameter("city"); String country = request.getParameter("country"); String query = "INSERT INTO `test`.`student`(Name,City,Co

我正在db中插入新行,控制台中没有异常。但该行不会插入到表中

String name = request.getParameter("name");
        String city = request.getParameter("city");
        String country = request.getParameter("country");
        String query = "INSERT INTO `test`.`student`(Name,City,Country)VALUES(?,?,?);";
        PreparedStatement ps = (PreparedStatement) con.prepareStatement(query);
        ps.setString(1,name);
        ps.setString(2,city);
        ps.setString(3,country);
        ps.executeUpdate();
        ps.close();

在代码的先验视图中,没有
commit
语句

您需要在
ps.close()
行之前执行此语句

致以最良好的祝愿

  • 连接查询时无需再次强制转换PreparedStatement。应该是

    Connection conn = getDBConnection();
    PreparedStatement ps = con.prepareStatement(query);
    
  • 删除该文件;从双引号内的查询

  • 在查询的双引号字符串中使用单引号时,首选连接运算符(+符号)


以下是我已经测试过的示例代码,运行良好。将其与您的代码进行比较,以了解您做错了什么

public void insertRowToDB(int staffID, String first_name, String last_name, int department_ID) {
    Connection dbConnection = null;
    try {
        dbConnection = DatabaseConnection.getconnection();
        if (!dbConnection.isClosed()) {
            String sql = "INSERT INTO staff (staffID,first_name,last_name,department_ID) VALUES(?,?,?,?)";
            PreparedStatement statement = dbConnection.prepareStatement(sql);
            statement.setInt(1, staffID);
            statement.setString(2, first_name);
            statement.setString(3, last_name);
            statement.setInt(4, department_ID);
            statement.executeUpdate();
        }
    } catch (SQLException ex) {
        Logger.getLogger(DatabaseConnection.class.getName()).log(Level.SEVERE, null, ex);
    } finally {
        try {
            if (dbConnection!=null) {
                if (!dbConnection.isClosed()) {
                    dbConnection.close();
                }
            }
        } catch (SQLException ex) {
            Logger.getLogger(DatabaseConnection.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

}

executeUpdate
返回什么?请删除
,然后重试。您准备好连接了吗?使用此连接的其他查询是否有效?@voidmain请尝试提交。我在下面看到了dxdy的评论,但并非所有jvm都有autocommit=true。当您认为您的工作已经完成时,提交是一种很好的做法。默认情况下,JDBC会自动提交语句。@dxdy并非所有jvm都会这样做。此外,它还可以在连接级别设置为true或false默认情况下,连接对象处于自动提交模式,这意味着它在执行每个语句后自动提交更改。如果已禁用自动提交模式,则必须显式调用方法commit以提交更改;否则,数据库更改将不会被保存。”我假设,如果OP选择了一个处理方式不同的JDBC驱动程序,他们会选择并意识到它。同样的情况也适用于手动设置,我会假设如果OP尝试手动禁用它,他们会意识到它。