我正在开发一个 Java 应用程序,该应用程序对数据库进行大量 JDBC 查询,每个查询都在一个单独的方法中指定,格式大致如下。
public static void sampleJDBCQuery(String query, DBUtil dbUtil, DataStructure dataStructure) {
ResultSet rs = null;
Handle handle = null;
Connection conn = null;
Statement stmt = null;
LOGGER.debug("Executing query = {}", query);
try {
handle = dbUtil.getConnectionHandle();
conn = handle.getConnection();
if (conn != null) {
stmt = conn.createStatement();
if (stmt != null) {
rs = stmt.executeQuery(query);
if (rs != null) {
while (rs.next()) {
// populate dataStructure using rs
}
}
}
}
} catch (Exception e) {
Metrics.markMeter("vertica.read.error");
LOGGER.error(e.getMessage(), e);
} finally {
DBUtil.closeResultSet(rs);
DBUtil.closeStatement(stmt);
DBUtil.close(handle);
LOGGER.debug("Finished query = {}", query);
}
}
使用上述格式的许多不同示例查询(和数据结构类),我的代码库一直在大幅增长。我的目标是拥有一个帮助方法,为我抽象出大部分 JDBC 逻辑。我的第一个想法是有一个具有以下签名的方法。
public static ResultSet executeJDBCQuery(String query, DBUtil dbUtil)
然后我可以遍历 的行并为每一行ResultSet填充相关内容。DataStructure问题是我仍然必须关闭返回ResultSet并ResultSet以不同的方法关闭似乎是糟糕的设计。
我想我正在寻找可能类似于 Python 的函数装饰器概念的东西,这样我就可以“装饰”一个 JDBC 查询来处理sampleJDBCQuery上面出现的大部分样板。我怎么能做到这一点?
当年话下
相关分类