为什么这个 PreparedStaement 会抛出 mysql 错误?
Why this PreparedStaement throws a mysql error?
我正在通过 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);
}
我也会留下带有准备语句的代码,所以你可以看到这确实有效。
@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);
}
请耐心等待,我是一名学生,在此先感谢。
就像@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!!
}
我正在通过 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);
}
我也会留下带有准备语句的代码,所以你可以看到这确实有效。
@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);
}
请耐心等待,我是一名学生,在此先感谢。
就像@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!!
}