sql >> データベース >  >> RDS >> Oracle

JDBC PreparedStatementでLIKEクエリを使用できませんか?

    まず、PreparedStatement プレースホルダー(? もの)は列の値用です のみ、テーブル名、列名、SQL関数/句などには使用できません。 String#format()を使用することをお勧めします 代わりは。第二に、あなたはすべきではありません '?'のようなプレースホルダーを引用します 、それは最終的なクエリを奇形にするだけです。 PreparedStatement セッターはすでにあなたのために引用(そしてエスケープ)の仕事をしています。

    修正されたSQLは次のとおりです。

    private static final String SQL = "select instance_id, %s from eam_measurement"
        + " where resource_id in (select RESOURCE_ID from eam_res_grp_res_map where"
        + " resource_group_id = ?) and DSN like ? order by 2");
    

    使用方法は次のとおりです。

    String sql = String.format(SQL, "SUBSTR(DSN,27,16)"); // This replaces the %s.
    preparedStatement = connection.prepareStatement(sql);
    preparedStatement.setInt(1, defaultWasGroup);
    preparedStatement.setString(2, "%Module=jvmRuntimeModule:freeMemory%");
    

    関連項目

    • Sun JDBCチュートリアル:プリペアドステートメントの使用
    • フォーマット文字列構文


    1. MySQLで新しいユーザーを作成し、1つのデータベースへのフルアクセスを許可します

    2. DBMS_OUTPUT.PUT_LINEの出力をファイルにリダイレクトするにはどうすればよいですか?

    3. SQL:上位3レコード+数量の合計を選択します

    4. Oracle Live SQL