有什么方法可以从一种jdbctemplate查询方法获取结果集对象?
我有一个类似的代码
List<ResultSet> rsList = template.query(finalQuery, new RowMapper<ResultSet>() {
public ResultSet mapRow(ResultSet rs, int rowNum) throws SQLException {
return rs;
}
}
);
Run Code Online (Sandbox Code Playgroud)
我想执行存储在finalQuery String中的sql语句并获取结果集。该查询是对6到7个表的复杂连接,我从每个表中选择4-5列,并希望获取这些列的元数据以将数据类型和数据转换为下游系统。
如果这是一个简单的查询,并且我仅获取一张表,则可以使用RowMapper#mapRow,并且在该maprow方法中可以调用ResultsetExtractor.extractData来获取结果列表;但是在这种情况下,我的查询中有复杂的联接,并且我试图从结果集元数据中获取结果集对象...
上面的代码不是很好,因为对于每个结果,它将返回相同的结果集对象,并且我不想将它们存储在列表中。
再说一遍,如果我查询的每个结果都调用maprow,即使我的列表引用了RS对象,JDBCTemplate也会关闭rs和连接吗?
有没有像jdbcTemplate.queryForResultSet(sql)这样的简单方法?
现在,我已经实现了自己的ResultSet Extractor来处理数据并将其插入下游系统
sourceJdbcTemplate.query(finalQuery, new CustomResultSetProcessor(targetTable, targetJdbcTemplate));
Run Code Online (Sandbox Code Playgroud)
此CustomResultSetProcessor实现ResultSetExtractor,在extractData方法中,我调用了3种不同的方法:1是通过运行rs.getMetaData()获取ColumnTypes,第二是通过运行目标元数据的getColumnTypes
SELECT NAME, COLTYPE, TBNAME FROM SYSIBM.SYSCOLUMNS WHERE TBNAME ='TABLENAME' AND TABCREATOR='TABLE CREATOR'
Run Code Online (Sandbox Code Playgroud)
在第三种方法中,我正在构建(准备好的)从目标列类型形成的insert语句,最后使用
new BatchPreparedStatementSetter()
{
@Override
public void setValues(PreparedStatement insertStmt, int i) throws SQLException{} }
Run Code Online (Sandbox Code Playgroud)
希望这对其他人有帮助...
我们必须在多个表中插入2百万条记录,现在我们正在写入CSV文件并使用db2 import加载到数据库中.
我们想把这个逻辑改成某种JDBC.在研究多种选择时,我对Spring JDBC模板和普通JDBC感到困惑.
让我们说我想在100个表中插入100万条记录,每个表都有10万个,所有这些都是简单的JDBC语句(不准备语句,因为我不知道我在运行时处理哪个表).
无论我们选择何种系统,都需要处理多达1500万条记录以满足峰值请求.
哪个框架会更好?