java跨库join方案_集算器协助java处理多样性数据源之跨库关联

Java自带的RowSet类库在跨库JOIN上存在限制,例如仅支持inner join,且受数据库实现影响。文章介绍了如何利用集算器esProc配合Java解决这一问题,esProc支持多种数据库的inner join和outer join。通过Java调用esProc脚本,实现跨库关联和过滤计算,将结果以ResultSet返回。示例展示了在db2和mysql之间进行JOIN并筛选特定条件的数据。
摘要由CSDN通过智能技术生成

Java的数据计算类库RowSet提供了JoinRowSet和FilteredRowSet类,可以进行跨库的关联计算,但是有很多局限。首先,JoinRowSet只支持inner

join,不支持outter join。其次,db2、mysql和hsql经过测试是可以使用JoinRowSet的,但是oracle

11g和其他数据库关联的的时候虽然不报错,但是结果集为空。而oracle11g的两个数据库用户跨库做join,使用JoinRowSet可以得到正确的结果。所以说不同数据库厂家提供的Jdbc实现可能会影响上述方法的结果。第三,就是编程还是有点复杂。

集算器esProc能很好配合java完成跨库连接。集算器支持各种数据库,包括:oracle、db2、mysql、sqlserver、sybase、postgresql等,均可完成多数据混合的inner

join和outter

join等各种跨库关联运算。下面我们通过例子来看一下具体作法:要将db2中的sales表和mysql数据库中的employee表通过sale.sellerid和employee.eid关联,过滤出state=”California”的所有sales和employee数据。例子虽然是db2和mysql,其他数据库的写法也是类似的。

Sales表的结构和数据如下:

a4c26d1e5885305701be709a3d33442f.png

Employee表的结构和数据如下:

a4c26d1e5885305701be709a3d33442f.png

实现的思路是:用Java程序调用集算器脚本,连接多个数据库实现关联和过滤计算后将结果以ResultSet的方式返回给Java程序。

esProc代码如下:

a4c26d1e5885305701be709a3d33442f.png

A1:连接预先配置好的db2数据源。

A2:连接预先配置好的mysql数据源。实际上对于oracle等其他数据库也同样支持。

A3、A4:分别从db2和mysql中读取sales序表和employee序表。esProc的集成开发环境可以直观的显示出导入的数据,如上图右边部分。

A5:使用集算器的对象引用机制,将sales序表和employee序表通过sellerid=eid关联。

A6:按照state="California"过滤序表。

A7:生成一个新的序表,得到需要的字段。

A8:返回给集算器程序的调用者。

在Java程序中使用esProc

JDBC调用这段程序获得结果的代码如下:(将上述esProc程序保存为test.dfx):

//建立esProcjdbc连接

Class.forName("com.esproc.jdbc.InternalDriver");

con=

DriverManager.getConnection("jdbc:esproc:local://");

//调用esProc程序(存储过程),其中test是dfx的文件名

com.esproc.jdbc.InternalCStatement st;

st

=(com.esproc.jdbc.InternalCStatement)con.prepareCall("call

test()");

//执行esProc存储过程

st.execute();

//获取结果集

ResultSet set = st.getResultSet();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值