我在Java中的预处理语句有问题-Mysql 8.0

时间:2019-09-17 13:51:44

标签: java mysql jdbc prepared-statement

我正在准备语句查询,但是查询语法有一个错误(如控制台中所示):

  

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 个答案:

答案 0 :(得分: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();
    }

对于其他情况,关闭语句(例如使用try-with-resources)非常重要。 当抛出重复的游戏名称而引发SQLException时,以上操作也会关闭statment