使用内存数据库从多个数据库查询

维卡斯·沙玛(Vikas Sharma)

如何使用内存数据库(例如H2 db)在内部联接查询下面编写内容。

select * from emp e inner join other_db.dept d on e.id=d.eid

emp表在db1数据库中创建,而dept表在other_db数据库中创建。

内存数据库的问题是数据库名称与数据源无关。因此,我们不能在查询中使用other_db.dept。

根据Thomas Mueller的建议,请在下面找到用LINKED TABLE用Java和Spring框架编写的代码

Spring配置文件:

<jdbc:embedded-database id="db1DataSource" type="H2">
    <jdbc:script location="classpath:schema-db1.sql" />
</jdbc:embedded-database>

<jdbc:embedded-database id="otherdbDataSource" type="H2">
    <jdbc:script location="classpath:schema-other.sql" />
</jdbc:embedded-database>

schema-db1.sql

SET MODE MSSQLServer

CREATE TABLE emp ( id int NOT NULL, name varchar(30) NOT NULL)

CREATE LINKED TABLE other_db ('org.h2.Driver', 'jdbc:h2:mem:test', 'sa', '', 'dept')

schema-other.sql

SET MODE MSSQLServer

CREATE TABLE dept ( id int NOT NULL, name varchar(20) NOT NULL, eid int NOT NULL)

现在,我可以在下面的查询中写:

select * from emp e inner join other_db.dept d on e.id=d.eid

实际上,我在运行代码时遇到以下异常:

Table dept not found
维卡斯·沙玛(Vikas Sharma)

我在h2 url中使用INIT属性在同一数据库下创建了两个模式,如下所示:

<bean class="org.apache.commons.dbcp.BasicDataSource"
    destroy-method="close" id="db1DataSource">
    <property name="driverClassName" value="org.h2.Driver" />
    <property name="url" value="jdbc:h2:mem:test;INIT=CREATE SCHEMA IF NOT EXISTS first_db\;SET SCHEMA first_db" />
    <property name="username" value="sa" />
    <property name="password" value="" />
</bean>

<jdbc:initialize-database data-source="db1DataSource">
    <jdbc:script location="classpath:schema-db1.sql" />
</jdbc:initialize-database>

<bean class="org.apache.commons.dbcp.BasicDataSource"
    destroy-method="close" id="otherdbDataSource">
    <property name="driverClassName" value="org.h2.Driver" />
    <property name="url" value="jdbc:h2:mem:test;INIT=CREATE SCHEMA IF NOT EXISTS other_db\;SET SCHEMA other_db" />
    <property name="username" value="sa" />
    <property name="password" value="" />
</bean>

<jdbc:initialize-database data-source="otherdbDataSource">
    <jdbc:script location="classpath:schema-other.sql" />
</jdbc:initialize-database>

现在,可以在qyery以下运行:

select * from emp e inner join other_db.dept d on e.id=d.eid

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从多个数据库查询数据

来自分类Dev

从多个数据库查询数据

来自分类Dev

脚本->查询多个数据库

来自分类Dev

MySQL查询多个数据库

来自分类Dev

使用游标在多个数据库中循环查询

来自分类Dev

laravel使用多个数据库,查询语法

来自分类Dev

使用 codeIgniter 查询多个数据库

来自分类Dev

使用MongoRepository的多个数据库

来自分类Dev

续集:使用多个数据库

来自分类Dev

如何跨多个数据库查询数据?

来自分类Dev

大数据库与多个数据库

来自分类Dev

大数据库与多个数据库

来自分类Dev

优点/缺点使用多个数据库与使用单个数据库

来自分类Dev

在多个数据库上执行SQL查询

来自分类Dev

执行多个数据库查询(承诺)顺序

来自分类Dev

多个数据库“意外参数”中的Sqlcmd查询

来自分类Dev

NotifyIcon - 防止多个数据库查询

来自分类Dev

在 .net MVC 中显示多个数据库查询

来自分类Dev

何时使用多个数据库与多个表

来自分类Dev

使用初始查询跨多个数据库合并查询?

来自分类Dev

SQLiteOpenHelper多个内存数据库

来自分类Dev

Redis多个数据库性能

来自分类Dev

用于多个数据库的TransactionManager

来自分类Dev

多个数据库连接冲突

来自分类Dev

django只读多个数据库

来自分类Dev

Oracle访问多个数据库

来自分类Dev

连接到多个数据库

来自分类Dev

蒸气中的多个数据库

来自分类Dev

SQL选择多个数据库