首页 > 解决方案 > 为什么这个 PreparedStaement 会引发 mysql 错误?

问题描述

我正在通过一个完美连接的 jdbc 连接插入 mysql 数据库,如果我执行 PreparedStatement 时,Tomcat 会抛出一个 sql 错误,内容如下:

java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?,?,?)' at line 1

问题是,当我通过语句进行查询时,它执行查询没有任何问题,这让我怀疑错误实际上是在 PreparedSatement 中。在这里我留下代码。

@Override
public void save(Planet planet) throws SQLException {
    String namePlanet = planet.getName();
    float massPlanet = planet.getMass();
    boolean habitablePlanet = planet.isHabitable();
    sql = "INSERT INTO planeta (nom,massa,habitable) VALUES (?,?,?)";
    PreparedStatement preparedStatement = conn.prepareStatement(sql);
    preparedStatement.setString(1, namePlanet);
    preparedStatement.setFloat(2, massPlanet);
    preparedStatement.setBoolean(3, habitablePlanet);
    preparedStatement.executeUpdate(sql);
}

我还将使用preparedstatement 保留代码,因此您可以看到这确实有效。

@Override
public void save(Planet planet) throws SQLException {
    String namePlanet = planet.getName();
    float massPlanet = planet.getMass();
    boolean habitablePlanet = planet.isHabitable();
    sql = "insert into planeta(nom,massa,habitable) value('" + namePlanet + "'," + massPlanet + "," + habitablePlanet + ")";
    stmt.executeUpdate(sql);

}

请耐心等待我,我是一名学生,提前谢谢。

标签: javamysqljdbcprepared-statement

解决方案


就像@Jens 在评论中所说的那样,我必须在executeUpdate()没有参数的情况下调用。

再次感谢@Jens!

那是正确的代码:

@Override
public void save(Planet planet) throws SQLException {
    String namePlanet = planet.getName();
    float massPlanet = planet.getMass();
    boolean habitablePlanet = planet.isHabitable();
    sql = "INSERT INTO planeta (nom,massa,habitable) VALUES (?,?,?)";
    PreparedStatement preparedStatement = conn.prepareStatement(sql);
    preparedStatement.setString(1, namePlanet);
    preparedStatement.setFloat(2, massPlanet);
    preparedStatement.setBoolean(3, habitablePlanet);
    preparedStatement.executeUpdate(); // <--- Here was the error!!

}


推荐阅读