ホームページ > データベース > mysql チュートリアル > Java PreparedStatement が構文エラーをスローするのはなぜですか?それを修正するにはどうすればよいですか?

Java PreparedStatement が構文エラーをスローするのはなぜですか?それを修正するにはどうすればよいですか?

DDD
リリース: 2024-11-28 21:46:13
オリジナル
619 人が閲覧しました

Why Does My Java PreparedStatement Throw a Syntax Error, and How Can I Fix It?

PreparedStatement 構文エラー

Java PreparedStatement を使用する場合、エラーを避けるために正しい構文を確認することが重要です。提供されたコード スニペットでは、間違ったメソッド呼び出しにより構文エラーが発生しました。

select1 メソッドは、準備されたステートメント SQL と整数 randNum を受け取り、それを実行しようとします。ただし、エラー メッセージは SQL ステートメントの構文の問題を示しています:

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 '?)' at line 1
ログイン後にコピー

問題は select1 メソッド内の return ステートメントにあります:

return this.stmt.executeQuery(sql);
ログイン後にコピー

この行は誤って実行しようとしていますSQL ステートメントを準備済みステートメントではなく通常のステートメントとして使用します。準備されたステートメントを実行する正しいメソッドは、executeQuery() です。

エラーを解決するには、コードを正しい useQuery() 呼び出しに置き換えます。

return this.stmt.executeQuery();
ログイン後にコピー

Updatedコード:

public ResultSet select1(String sql, int randNum) {
    try {
        this.stmt = con.prepareStatement(sql);
        stmt.setInt(1, randNum);
        return this.stmt.executeQuery(); // Call PreparedStatement.executeQuery
    } catch (SQLException e) {
        e.printStackTrace();
        return null;
    }
}
ログイン後にコピー

注:

SQL クエリの構文も正しい必要があります。この場合、WHERE 句の値の周囲にバッククォートがないことがエラーの原因でした。正しい SQL ステートメントは次のとおりです:

String selectSql1 = "SELECT `value` FROM `sampling_numbers` WHERE `value` < ?";
ログイン後にコピー

以上がJava PreparedStatement が構文エラーをスローするのはなぜですか?それを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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