ホームページ >Java >&#&チュートリアル >MySQL で PreparedStatement によって「SQL 構文にエラーがあります」という例外が発生するのはなぜですか?
問題:
PreparedStatement を使用してクエリを実行するときJava では、MySQLSyntaxErrorException が発生し、次のエラー メッセージが表示されます。 SQL 構文...'? または MemberName = ?' の近く。"
コード:
String query = "select MemberID, MemberName from members where MemberID = ? or MemberName = ?"; Connection conn = DriverManager.getConnection(DATABASE_URL, USERNAME, PASSWORD); PreparedStatement s = conn.prepareStatement(query); s.setInt(1, 2); s.setString(2, "zen"); ResultSet rs = s.executeQuery(query);
原因:
構文エラーは、SQL クエリ内の疑問符 (?) によって発生します。 MySQL は、これをパラメータのプレースホルダとしてではなく、リテラルの疑問符として解釈します。これにより、無効な SQL 構文が発生します。
解決策:
この問題を解決するには、SQL クエリ内の疑問符を名前付きパラメータに置き換えます。これにより、PreparedStatement がパラメータ値を正しくバインドできるようになります。
String query = "select MemberID, MemberName from members where MemberID = :member_id or MemberName = :member_name";
Java コードでは、PreparedStatement#setString メソッドを使用して名前付きパラメータを設定します。
s.setString("member_id", "2"); s.setString("member_name", "zen");
または、 s.executeQuery(query) の代わりに引数なしの s.executeQuery() メソッドを使用して、準備されたクエリが元のクエリ。
リソース リーク:
提供されたコードにはリソース リークの問題があることに注意してください。リソースの枯渇を防ぐために、Connection、Statement、および ResultSet オブジェクトは、finally ブロックで閉じる必要があります。
以上がMySQL で PreparedStatement によって「SQL 構文にエラーがあります」という例外が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。