如何用 JDBC 进行跨库查询
例题描述和简单分析
Oracle数据库中,有 STATEINFO 表,部分数据如下所示:
STATEID | POPULATION | AREA |
1 | 4779736 | 52419 |
2 | 710231 | 663267 |
3 | 6392017 | 113998 |
4 | 2915918 | 52897 |
5 | 37253956 | 163700 |
… | … | … |
MySQL数据库中,有 STATENAME 表,部分数据如下所示:
STATEID | NAME | ABBR |
1 | Alabama | AL |
2 | Alaska | AK |
3 | Arizona | AZ |
4 | Arkansas | AR |
5 | California | CA |
… | … | … |
逻辑上,两表按 STATEID 关联,需要用 JDBC 进行跨库查询,部分结果如下:
STATEID | POPULATION | AREA | NAME | ABBR |
1 | 4779736 | 52419 | Alabama | AL |
2 | 710231 | 663267 | Alaska | AK |
3 | 6392017 | 113998 | Arizona | AZ |
4 | 2915918 | 52897 | Arkansas | AR |
5 | 37253956 | 163700 | California | CA |
… | … | … | … | … |
解法及简要说明
在集算器中编写脚本 p1.dfx,如下所示:
方法一:SPL
A | |
1 | =connect("oracle") |
2 | =A1.query@x("SELECT * FROM STATEINFO") |
3 | =connect("mysql") |
4 | =A3.query@x("SELECT * FROM STATENAME") |
5 | =join(A2:SI,STATEID;A4:SN,STATEID) |
6 | =A5.new(SI.STATEID,SI.POPULATION,SI.AREA,SN.NAME,SN.ABBR) |
简要说明:
A1 连接数据源名为 oracle 的数据库
A2 执行 SQL,结果返回序表,执行完后关闭数据库连接
A3 连接数据源名为 mysql 的数据库
A4 执行 SQL,结果返回序表,执行完后关闭数据库连接
A5 序表 A2、A4 按关联字段 STATEID 进行关联
A6 生成需要的结果序表
方法二:简单SQL
A | |
1 | =connect("mysql").cursor@x("SELECT * FROM STATENAME") |
2 | =connect("oracle").cursor@x("SELECT * FROM STATEINFO") |
3 | $select n.STATEID as STATEID,n.POPULATION as POPULATION,n.AREA as AREA,m.NAME as NAME,m.ABBR as ABBR from {A1} m join {A2} n on m.STATEID=n.STATEID |
简要说明:
A1 连接数据源名为 mysql 的数据库,返回根据 sql 创建的数据库游标,关闭游标时自动关闭数据库连接
A2 连接数据源名为 oracle 的数据库,返回根据 sql 创建的数据库游标,关闭游标时自动关闭数据库连接
A3 用简单 SQL 关联两表
JAVA 集成这段代码的方法可参考:《Java 如何调用 SPL 脚本》。
英文版