問題

この質問にはすでに答えがあります:

私は次のコードを実行しようとしています

 package jdbclesson;

import java.sql.*;

public class PreparedQuery {

public static void main(String[] args) throws Exception
{
    String url              = "jdbc:mysql://localhost:3306/alien?useSSL=false";
    String uname            = "root";
    String pass             = "ma123";
    String query            = "UPDATE student SET username= ? where userid= ? ";
    PreparedStatement stmt  = null;


    Class.forName("com.mysql.jdbc.Driver");
    Connection con = DriverManager.getConnection(url, uname, pass);
    stmt = con.prepareStatement(query);

    stmt.setString(1, "tina");
    stmt.setInt(2, 6);


    int rs = stmt.executeUpdate(query);

    System.out.println(rs);
    stmt.close();
    con.close();

}

}
 

しかし、次のエラーが発生する

スレッド "main"の例外 com.mysql.jdbc.adals tions.jdbc4.MySQLSyntaxErrorException:あなたは SQL構文のエラー。あなたのマニュアルに対応するマニュアルをチェックしてください 正しい構文を使用するためのMySQLサーバのバージョン '?どこで 1行目のuserid =? '

私のデータベースには、2列のユーザーIDとユーザー名と10行のテーブル学生が1つしかありません。

  ベストアンサー

試して:

 int rs = stmt.executeUpdate();
 

の代わりに:

 int rs = stmt.executeUpdate(query);
 

executeUpdate()は、必要なものであるプリペアドステートメントのクエリを実行します。 executeUpdate(query)は、メソッドに渡されたクエリを実行します。エラー(contains?)でSQLを渡していたため、エラーが発生していました。

  同じタグがついた質問を見る

javamysqljdbcsql-updateprepared-statement