gpt4 book ai didi

java - 如何使用两个 Multi-Tenancy 数据源之间的事务复制数据?

转载 作者:行者123 更新时间:2023-12-02 02:21:38 26 4
gpt4 key购买 nike

我已成功使用 article 设置 Multi-Tenancy 数据源。结果我有两个连接,我可以通过

MultiTenantConnectionProvider provider = ctx.getBean(MapMultitenantConnectionProvider.class);

Connection main = provider.getConnection("main");
Connection alt = provider.getConnection("alt");

这两个连接都是PgConnection.class类型(Connection接口(interface)),并且支持事务管理和我需要的所有东西。但我还需要将足够的大数据从第一个连接传递到另一个连接,而无需分析或任何数据过滤。

我已经成功地迭代了 ResultSet,通过

实现
String getCompaniesQuery = "select * from companies";
String setRecordQuery = "insert into companies (company) values (?)";

try (Connection main = provider.getConnection("main");
Connection alt = provider.getConnection("alt")) {

PreparedStatement companies = main.prepareStatement(getCompaniesQuery);
ResultSet set = companies.executeQuery();

while (set.next()) {

PreparedStatement records = alt.prepareStatement(setRecordQuery);
records.setString(1, set.getString(1));

records.execute();
alt.commit();
}

} catch (SQLException e) {
e.printStackTrace();
}

但是这个迭代让我感到不高兴。

请给我建议,或者为我指明有效操作方式(可能使用流和 lambda)的方向(或框架),而不是手动迭代结果集以将数据从 alt 传递到 main(提到的连接)?

数据库中所有表的结构都是相同的。

最佳答案

无论您对流、lambda 或 ORM 映射做了什么聪明的事情……幕后都是 SQL select 和 insert 语句。以及结果集的迭代。

如果您想在不使用 SQL select/insert/iteration 的情况下传输数据,那么您需要寻找特定于数据库的支持,以在数据库之间复制或同步数据。

例如,对于 Oracle,您可以使用如下内容:

INSERT into local_table select * from table@database_link; 

/* SQLPlus */
COPY FROM database TO database CREATE destination_table
[(column, column, column, ...)] USING query

其中数据库的格式为用户名[/密码]@connect_identifier

(来源:https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:9532217300346683472)

关于java - 如何使用两个 Multi-Tenancy 数据源之间的事务复制数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57273543/

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