Oracle连接URL中的默认架构

时间:2010-03-01 02:35:57

标签: oracle jdbc connection-string

我想在Oracle Connection URL

中设置默认数据库架构
jdbc:oracle:thin:@<server>:<port1521>:<sid>

我的示例SQL语句:

select monkey_name from animals.monkey

我需要查询没有模式前缀animals.的数据库,即当我运行此语句时

select monkey_name from monkey

默认情况下会使用animals架构。

我需要在上面的连接URL中指定什么才能获得这样的效果?

感谢。

5 个答案:

答案 0 :(得分:34)

您无法在连接网址中添加任何内容。

在Oracle中,每个用户都有自己的架构(即使不包含任何对象),这是他们的默认架构。登录/连接后,他们可以使用

更改其默认架构
ALTER SESSION SET CURRENT_SCHEMA=animals

所以你需要在连接后做额外的声明。 可以在用户和/或数据库上有一个登录触发器,当他们登录时会运行它。我个人更喜欢在应用程序连接时使用显式语句。

答案 1 :(得分:13)

如果您使用C3PO,则可以在检查连接时执行此操作。

作为属性:

c3p0.preferredTestQuery=alter session set current_schema=animals
c3p0.testConnectionOnCheckout=true

作为Java代码:

ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setPreferredTestQuery("alter session set current_schema=animals");
dataSource.setTestConnectionOnCheckout(true);

下行是每次从池中取出连接时都会发生这种情况。

如果您自己使用JDBC连接,则可以这样做:

Class.forName("oracle.jdbc.driver.OracleDriver");
Connection connection = getConnection("jdbc:oracle:thin:@//server:1521/instance",   "username", "password");
connection.createStatement().execute("alter session set current_schema=animals"));

答案 2 :(得分:11)

使用同义词怎么样?

create synonym monkey for animals.monkey;

select monkey_name from monkey

答案 3 :(得分:0)

您可以使用连接数据库用户创建触发器来更改当前架构。

create or replace trigger SET_SCHEMA_AFTER_LOGON
    after logon on database
begin
     execute immediate 'alter session set CURRENT_SCHEMA=animals';
end SET_SCHEMA_AFTER_LOGON;

答案 4 :(得分:0)

从 Java 1.7 开始,java.sql.Connection 上就有一个 setSchema 方法。

在 Oracle 的 oracle.jdbc.driver.PhysicalConnection 实现中,此方法执行 alter session set current_schema = ? 语句。