1

SQLDBでは機能しないPreparedStatementを実装しようとしています。

次のSQLクエリがあるとします。

String selectSqlQuery = "SELECT * FROM customer WHERE f1 = ? AND f2 =? AND f3 > ?";

および次のコード:

       //----

        prest = con.prepareStatement(selectSqlQuery );
        prest.setString(1, "val1");
        prest.setString(2, "val2");
        prest.setInt(3, 108);
        ResultSet rs = prest.executeQuery();
        //---

私の質問は、パラメータを挿入するためのsetStringメソッドとsetIntメソッドを実装する方法ですか?

今のところ、パラメーターのインデックスと値をHashMapに保存していますが、その後はSQLクエリ文字列に挿入できません。

4

2 に答える 2

1

SQL の Java インターフェイスの実装は、ベンダー固有の jdbc ドライバーの一部です。おそらく、データベースに適した jdbc jar ファイルを取得する必要があるだけです。独自のデータベースドライバーを作成する場合は、通常、そのようなものの実装を作成する必要があります...

于 2012-10-02T14:35:04.907 に答える
0

独自のドライバーを作成しているので、クラスで少し遊ぶことができます。アプローチを変えましょう。次のようなクエリがある場合:

"SELECT * FROM table WHERE id = ? AND name = ?"

に置き換える?と、

"SELECT * FROM table WHERE id = {0} AND name = {1}"

set メソッドについては、新しいパラメーターをObject配列に保存し、再びインデックスと照合する必要があります。

Object parameterArray = new Object[1];

public boolean setString(int paramIndex, String param) {
    if(paramIndex < 0 || paramIndex > parameterArray.length)
        throw new IllegalArgumentException("Can't set parameter " + paramIndex + ", The query only has " + parameterArray.length + " parameters."); 
    parameterArray[paramIndex - 1] = param;
}

クエリを実行する前に、フォーマットされた文字列を利用してパラメーターを設定します。

MessageFormat messageFormat = new MessageFormat(query);
String newQuery = messageFormat.format(parameterArray);

このメソッドは、括弧で囲まれたインデックス内の対応する要素formatの部分文字列を置き換えます。{number}number

于 2012-10-02T17:35:31.747 に答える