2

ORM や動的 SQL ビルダーを使用したくありません。必要なのは、名前付きパラメーターを使用してプリペアド ステートメントを作成できるクラスだけです。または、少なくとも、異なるデータ型のパラメーターのパラメーター プレースホルダーを安全に置き換えます。

編集: JDBC が名前付きパラメーターをサポートしていないことは知っています。そこで、図書館について質問です。

4

1 に答える 1

3

私の知る限り、JDBC は名前付きパラメーターを使用しませんが、位置パラメーター用のライブラリはまったく必要ありません。これは、「さまざまなデータ型のパラメーターのパラメーター プレースホルダーを安全に置き換える」のに十分です。

PrepareStatement statement = connection.prepareStatement
    ("SELECT Foo FROM Bar WHERE Baz = ?");
try {
    statement.setString(1, "John O'Reilly"); // No problem with quote here
    ResultSet results = statement.executeQuery();
    ...
} finally {
   statement.close();
}

詳細については、準備済みステートメントに関する JDBC チュートリアルを参照してください。

編集:名前付きパラメーターのようなものを本当に使用したい場合、およびSQL自体を制御している場合(他の場所では使用されないフォームを使用するようにすることができます)、独自のクエリトランスレータをかなり簡単に作成できます:

  • TranslatedQuery次のようなインスタンス(これが新しいクラスです)を作成します"SELECT Foo FROM Bar WHERE Baz = @Baz"
  • 各パラメータの位置を計算し、次のように置き換えます?
  • 指定された名前の位置を返すメソッドと、変換された SQL を返すメソッドを用意します。

クラスをテストで完成させるのに数時間以上かかることはありません。実際に JDBC に触れる必要はありません。

于 2013-06-09T18:20:07.867 に答える