gpt4 book ai didi

grails - 如何使用 grails 跨数据库查询?

转载 作者:行者123 更新时间:2023-12-02 13:59:44 25 4
gpt4 key购买 nike

有没有办法在 grails 中跨 2 个数据库进行查询?

示例(我在两个数据库上进行了选择 - 工作和测试):

        select
c.crf_name,
c.crf_id,
ig.group_id,
ig.group_name,
from
works.crfs c,
test.item_groups ig;

1)我想查询两个数据库,并将结果附加到一个域。

或者 :

2) 是否可以将一个查询部分与数据库中的数据混合,另一部分与域类混合?

编辑 :我需要从 2 个数据库(一个 db 是 PostgreSQL,另一个 db 是 Mysql)中执行单个查询混合表。那么,在 grails 中是否可以在一个查询中混合到 dataSources bean?

编辑 2:这里有一个更好的例子:
select
igm.item_id,
igm.item_group_id as group_id,
igm.crf_version_id,
ig.name as group_name
from
works.item_group_metadata igm,
test.item_group ig
where
igm.item_group_id=ig.item_group_id
;

最佳答案

如果您正在计划 to do your own sql (好像是这样)超过 2 个数据源,我建议您将 2 个数据源定义为 grails-app/conf/spring 中的 Spring bean。

例如(将您的数据库驱动程序放在/lib 中并替换值以匹配您的 RDBMS 驱动程序和连接字符串):

import org.apache.commons.dbcp.BasicDataSource
import oracle.jdbc.driver.OracleDriver

beans = {
worksDataSource(BasicDataSource) {
driverClassName = "oracle.jdbc.driver.OracleDriver"
url = "jdbc:oracle:thin:@someserver:someport:works"
username = "works"
password = "workspassword"
}

testDataSource(BasicDataSource) {
driverClassName = "oracle.jdbc.driver.OracleDriver"
url = "jdbc:oracle:thin:@someserver:someport:test"
username = "test"
password = "testpassword"
}
}

然后创建一个服务来处理您的查询,例如:
import groovy.sql.Sql

class SomeService {
def worksDataSource
def testDataSource

def query1 = """
SELECT crf_name, crf_id
FROM works.crfs
"""

def query2 = """
SELECT group_id, group_name
FROM test.item_groups
"""

def sqlWorks = Sql.newInstance(query1)
def sqlTest = Sql.newInstance(query2)

// Then do whatever you like with the results of the 2 queries
// e.g.

sqlWorks.eachRow{ row ->
def someDomainObject = new SomeDomainObject(prop1 : row.crf_name, prop2 : crf_id)
someDomainObject.otherProp = whateverYouLike()
someDomainObject.save()
}
}

您的查询没有 where 子句,所以我不知道您想如何关联来自 2 个表的数据...

如果您想对来自 2 个数据库的混合表进行单个查询,(请您的 DBA)在数据库 test 和 work 之间建立一个 DBLink,并在包含 DBLink 的数据源上执行查询。

我希望这有帮助。

关于grails - 如何使用 grails 跨数据库查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2233522/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com