ホームページ >Java >&#&チュートリアル >Java の PreparedStatement が「?」付近の MySQL 構文エラーをスローするのはなぜですか?

Java の PreparedStatement が「?」付近の MySQL 構文エラーをスローするのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-01 02:31:09191ブラウズ

Why Does My PreparedStatement in Java Throw a MySQL Syntax Error Near

PreparedStatement に関する MySQL 構文エラーの質問

Java で PreparedStatement を使用してクエリを実行しようとすると、「?」付近の構文エラーを示すエラーが発生します。例外は次のとおりです。

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 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 '? or MemberName = ?' at line 1

コード スニペット

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); // Fail!

問題の解決策

MySQL が「?」を認識しないためにエラーが発生します。 SQL クエリ内でプレースホルダーとして使用されます。これは、次の呼び出しによるものです:

rs = s.executeQuery(query); // Fail!

引数なしで PreparedStatement#executeQuery を使用する代わりに、元のクエリ文字列が渡され、準備されたステートメントがオーバーライドされます。

問題を解決するには、PreparedStatement のexecuteQuery メソッドは引数なしで呼び出す必要があります:

rs = s.executeQuery(); // OK!

Resourceリーク

元の問題とは関係ありませんが、コードはリソースをリークします。これを防ぐには、JDBC イディオムを使用してリソースを閉じる必要があります:

try {
    // Acquire resources here
} catch (Exception e) {
    // Handle exception
} finally {
    // Close resources here
}

以上がJava の PreparedStatement が「?」付近の MySQL 構文エラーをスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。