我对 Java 中的准备好的语句有问题 - Mysql 8.0 [重复]
Posted
技术标签:
【中文标题】我对 Java 中的准备好的语句有问题 - Mysql 8.0 [重复]【英文标题】:I have a problem with the prepared statement in Java - Mysql 8.0 [duplicate] 【发布时间】:2019-09-17 13:51:44 【问题描述】:我正在处理准备好的语句查询,但查询语法有错误(如我的控制台中所示):
java.sql.SQLSyntaxErrorException:您的 SQL 语法有错误;检查与您的 mysql 服务器版本相对应的手册,以了解在 '? 附近使用的正确语法。 , ? , ? )' 在第 1 行
我不知道它有什么问题。 注意:上面的查询在 mysql 上工作(测试),我刚刚更改了 Java 中的 VALUES 。
connection = DataSource.getConnection();
String insertGame = " insert into games (game_name , game_genre , game_year ) values ( ? , ? , ? ) ";
statment = connection.prepareStatement(insertGame);
statment.setString(1, game.getName());
statment.setString(2, game.getGenre());
statment.setInt(3, game.getYear());
statment.executeUpdate(insertGame);
【问题讨论】:
删除尾随; 【参考方案1】:错误是您使用父类的Statement.executeUpdate(String)
而不是PreparedStatement.executeUpdate()
。
分号作为语句分隔符不属于提供给 JDBC 的单个语句。
String insertGame = "insert into games (game_name, game_genre, game_year) "
+ "values (?, ?, ?)";
try (PreparedStatement statment = connection.prepareStatement(insertGame))
statment.setString(1, game.getName());
statment.setString(2, game.getGenre());
statment.setInt(3, game.getYear());
statment.executeUpdate();
对于其余的关闭语句,就像使用资源尝试一样,很重要。
当因重复游戏名称而引发 SQLException 时,上述内容也将关闭 statment
。
【讨论】:
感谢您的回答。我试过删除分号,但我仍然有同样的错误。对于 try-catch 块,我的代码有它......但我只复制了我的问题中的查询部分。 对不起,我重读了错误,它告诉了我们真相。更正了答案。它传递没有?
替换的SQL 字符串,因此使用Statement.executeUpdate,使用executeUpdate()
。 这实际上是一个常见的错误;糟糕的 API。以上是关于我对 Java 中的准备好的语句有问题 - Mysql 8.0 [重复]的主要内容,如果未能解决你的问题,请参考以下文章