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

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

Patricia Arquette
リリース: 2024-12-11 12:46:15
オリジナル
584 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート