java - 如何在java中执行sql查询之前更改数据库链接?

标签 java oracle jdbc

应用程序使用 Spring 和 Hibernate。

是否可以更改dblink ,在Java中执行sql查询之前?是原生 JDBC 还是 Hibernate?

我知道这是可能的

refer to a table or view on the other database by appending @dblink to the table or view name

但我不能这样做,因为 sql 查询是由用户编写的,我无法控制它(解析它太复杂)。

上面的代码显示了我正在尝试做的事情...

// TODO connect to the db link ??? 
List<Object> results = this.getSession().doReturningWork(new ReturningWork<Object>(){

        @Override
        public String execute(Connection connection) throws SQLException
        {
            final ResultSet rs = connection.createStatement().executeQuery(userQuery);
            // doing something with results....

        }

});

最佳答案

您可以在架构中创建引用其他数据库上的表的同义词:

CREATE OR REPLACE SYNONYM "SOURCE_SCHEMA"."SYNONYM_NAME" FOR "TARGET_SCHEMA"."TARGET_TABLE"@"DBLINK"

这样您就可以通过同义词名称访问外部表,从而使您无法了解对象的确切物理位置:

SELECT * FROM SYNONYM_NAME

如果您想使用 Hibernate 映射此实体,您将像任何其他对象一样使用同义词名称。

关于java - 如何在java中执行sql查询之前更改数据库链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33696289/

相关文章:

java - 传递一个扩展另一个类的类

java - 如何将此 PHP 行移植到 Java?

java - LocalDateTime - 使用 LocalDateTime.parse 进行反序列化

python - cx_Oracle 在连接字符串上使用 SID 而不是服务名称时不连接

java - 如何在java中标记输入文件

java - 如何将游标或记录列表传递给pl/sql中的java过程?

django - 可以防止 Django 截断长表名吗?

java - 使用 JDBC 和唯一约束批量插入

database - 如何处理ORA-00972 : identifier is too long Exception with Hibernate 5 a Naming Strategy

java - jdbc 中管理丢失连接的标准方法是什么?