ホームページ >データベース >mysql チュートリアル >MySQL PreparedStatements で「'?' 付近の構文エラー」が発生するのはなぜですか?

MySQL PreparedStatements で「'?' 付近の構文エラー」が発生するのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-11 12:46:15556ブラウズ

Why Am I Getting a

「?」付近の例外MySQL

で PreparedStatement を実行する場合 Java では、PreparedStatement を使用してクエリを実行すると、「?」付近の構文エラーを示すエラー番号 1064 の MySQLSyntaxErrorException が発生することがあります。これは、クエリが MySQL クエリ ブラウザで置換値を使用して機能する場合でも発生することがあります。

詳しく調べると、MySQL が「?」を解釈できないことが明らかです。 SQL クエリ内のプレースホルダーは、無効な構文とみなされます。これは、PreparedStatement がこれらのプレースホルダーを置き換えていないためです。

共有したコード スニペットにより、準備されたクエリが元のバージョンで誤って上書きされます。これを修正するには、Statement#executeQuery(String) の代わりに PreparedStatement#executeQuery() を使用します。

PreparedStatement s = conn.prepareStatement(query);
s.setInt(1, intValue);
s.setString(2, strValue);        
rs = s.executeQuery(); // Correct

注: 現在の問題とは関係ありませんが、コードは接続、ステートメント、および結果セット。この省略により、リソースが枯渇し、その後アプリケーションがクラッシュする可能性があります。これらのオブジェクトをfinallyブロック内で閉じて、適切なJDBCイディオムを実装します:

try (Connection conn = DriverManager.getConnection(...);
     PreparedStatement s = conn.prepareStatement(...);
     ResultSet rs = s.executeQuery()) {
     // Query execution code
} finally {
     if (rs != null) rs.close();
     if (s != null) s.close();
     if (conn != null) conn.close();
}

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

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