こんな状況です
jOOQでは、JDBC を抽象化する必要がたくさんあります。一部のデータは単純な ResultSet から取得され、一部のデータは SQLInput (UDT の場合)、または CallableStatements (ストアド プロシージャ/関数の場合) から取得されます。したがって、これらの JDBC タイプに抽象化を追加したいと思います。
java.sql.ResultSet
java.sql.CallableStatement
java.sql.SQLInput
java.sql.SQLOutput
現在、それらはすべてほぼ同じように機能します。通常、のすべてのデータ型に対してget
andメソッドがあります。たとえば、次のような方法で出荷されますset
java.sql.Types
BigDecimal getBigDecimal(int index);
int getInt(int index);
そして、それらはすべて次のようなメソッドを持っています
boolean wasNull();
問題
残念ながら、これらの JDBC インターフェイスは単一の共通インターフェイスを拡張するものではなく、このスニペットのような一般的な JDBC コードを記述したい人にとっては簡単です (私の質問をサポートするための単なる例です)。
// As JDBC has no support for BigInteger types directly,
// read a BigDecimal and transform it to a BigInteger
BigDecimal result = null;
if (source instanceof ResultSet) {
result = ((ResultSet) source).getBigDecimal(index);
}
else if (source instanceof CallableStatement) {
result = ((CallableStatement) source).getBigDecimal(index);
}
else if (source instanceof SQLInput) {
result = ((SQLInput) source).readBigDecimal();
}
return result == null ? null : result.toBigInteger();
ResultSet
上記のコードは、 、CallableStatement
、の 3 つすべてに対して記述する必要がありますSQLInput
。そして、似たような例がたくさんあります
私の質問は
- この問題をエレガントに解決する JDBC 拡張ライブラリを知っている人はいますか?
- それとも、これらすべてのタイプの単純なラッパー クラス (またはアダプター) を自分で作成する必要がありますか?
- それとも、その事実を受け入れて、内部ライブラリ コードを複製し続けますか?
どのソリューションを好みますか、またその理由は何ですか? フィードバックをお寄せいただきありがとうございます