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