Java 使用JDBCTemplate在单个查询中提供多个数据源

Java 使用JDBCTemplate在单个查询中提供多个数据源,java,sql,spring-jdbc,jdbctemplate,Java,Sql,Spring Jdbc,Jdbctemplate,我有两个数据源连接DS1和DS2。我正在使用JDBC模板。我有如下的条件select语句,它将使用两个数据源从DS1.table1和DS2.table2中进行选择 可以在一个JDBC查询中连接两个模式吗 searchResult = this.jdbcTemplate.query(search_query, parameterValues.toArray(new Object[parameterValues.size()]), new ManageMapper()); StringBuild

我有两个数据源连接DS1和DS2。我正在使用JDBC模板。我有如下的条件select语句,它将使用两个数据源从DS1.table1和DS2.table2中进行选择

可以在一个JDBC查询中连接两个模式吗

searchResult = this.jdbcTemplate.query(search_query, parameterValues.toArray(new Object[parameterValues.size()]), new ManageMapper());


StringBuilder search_query = new StringBuilder();
        search_query.append(...................);
        .
        .
        .
        .
        stringBuilder.append(" left  join schema1.table t1 on t1.emp_id = t111.emp_id ");

        if (searchRequest.getOnboardStatus() != null && (searchRequest.getOnboardStatus().equals("True")) {         
            stringBuilder.append(" inner join schema2.table2 t2 on t2.dept_id = t222.dept_id and t222.to_dt is null");
        }


@Autowired
@Qualifier(value = "jdbcDS1")
protected JdbcTemplate jdbcDS1Template;


@Autowired
@Qualifier(value = "jdbcDS2")
protected JdbcTemplate jdbcDS2Template;

JDBC在DBMS级别运行,生成用于执行的SQL代码。 一次只能将SQL发送到1个DBMS。在特殊情况下,DBMS引擎可以执行分布式查询,如Oracle RAC或并行查询。然而,DBMS控制着这一点


如果在超过1个JDBC数据源上使用多个DBMS模式,DBMS不知道其他模式中的其他数据在哪里,因此对于多个JDBC数据源,这是无法做到的。但是,如果您知道模式驻留在1个DBMS中,那么您可以向该DBMS发送一个访问多个模式的查询。在Java端,您必须仅使用1个JDBC数据源来执行此操作。

您的目的不是很清楚,如果您能清楚地说出您希望查询的方式,那就更好了。。但是,如果您拥有DS1对DS2的select权限,请以适当的方式准备查询。。我认为“spring”标签是无用的,需要“database”和“sql”标签,所以我编辑了你的问题。