这是这种情况
在jOOQ中,非常需要对 JDBC 进行抽象。我希望 jOOQ 客户端代码不知道这样一个事实,即从简单的 ResultSet 检索一些数据,从 SQLInput(对于 UDT)或从 CallableStatements(对于存储过程/函数)检索一些数据。因此,我想对这些 JDBC 类型添加抽象:
java.sql.ResultSet
java.sql.CallableStatement
java.sql.SQLInput
java.sql.SQLOutput
现在它们的工作方式几乎相同。他们通常get
对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
, SQLInput
。还有很多类似的例子
我的问题是
- 有谁知道优雅地解决这个问题的 JDBC 扩展库?
- 还是我应该自己为所有这些类型编写一个简单的包装类(或适配器)?
- 还是您会接受这个事实并继续复制内部库代码?
您更喜欢哪种解决方案,为什么?感谢您的任何反馈