java - 为什么这个 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);
}
请耐心等待我,我是一名学生,提前谢谢。
解决方案
就像@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!!
}
推荐阅读
- node.js - 启动用户态代理时出错:绑定 127.0.0.1:3306 失败:端口已分配。在 docker 运行命令上
- xml - 使用 XPath 生成 XML 文件
- https - 无法在 Istio 网关中设置 https
- gnupg - 升级后 GPG 无法再解密文件
- java - Deeplearning4j (DL4J) 低精度、召回率和 F1
- sql - SQL - 带重置的窗口计数
- c# - 为什么我的循环混合了第一个循环和最终循环的第一个输入
- c# - Google Maps Geocode API 以编程方式返回 NO_RESULTS,但在浏览器中返回具有相同 URL 的结果
- angular - 如何从 Ionic 3 中的 WordPress rest api 访问 JSON 值
- java - 没有合适的添加方法