如何用 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 脚本》

问答搜集

https://stackoverflow.com/questions/21968834/jdbcis-it-possible-to-execute-multi-database-querys-in-java