1

一般化メソッドを使用して、JavaでプレーンSQLクエリをパラメトリックSQLに変換したい

プロジェクトで使用した方法は以下のとおりです。これには多くの参照があります。

    public Object executeQuery(String aQuery) {
    Connection con = null;
    Statement stmt = null;
    ResultSet r = null;
    try {

        con = getConnection() ;
        stmt = con.createStatement();
        r = stmt.executeQuery(aQuery);

        if (r.next()) {
            //return extracted result;
        }

        return null;
    } catch (SQLException e) {
        throw new RuntimeException(
            "Cannot execute query " + aQuery + " : " + e.getMessage());
    } finally {
        cleanup(r,stmt,con);
    }
    }

    //=========
    //calling above method
    executeQuery("Update USER set user_id = 15 where user_name='test');

私はこれをJavaプリペアドステートメントを使用してパラメトリックSQLに変換することを考えていました。その後、メソッドの呼び出しは変更されませんが、次のようにクエリします

       Update USER set user_id = 15 where user_name='test' 

javaPreparedStatementと適切なパラメータを使用します

       Update USER set user_id = ? where user_name=? 

Springや他のフレームワークを使用するようにこれを行う方法はありますか?

前もって感謝します !

4

1 に答える 1

2

その後、メソッドの呼び出しは変更されません

呼び出しメソッドは絶対に変更する必要があります。これを手動で行おうとしないことを強くお勧めします。呼び出し元が値を適切にエスケープできなかった場合は、すでにSQLが壊れています。これを修正して、パラメーターを使用してSQLを修正しようとすると面倒です。

メソッドをオーバーロードし、呼び出し元を壊れたメソッドから機能しているメソッドに徐々に移動することをお勧めします。(もちろん、壊れたものはすぐに廃止してください。)

多くの発信者がいる可能性があり、したがって多くの作業が発生する可能性があることを認識していますが、それは単に長い間壊れたままにしていた結果です。絆創膏を貼るだけでなく、根本的な問題に今すぐ取り組みましょう。

于 2013-03-04T07:43:41.393 に答える