省略DERBY查询中的模式

时间:2013-03-31 22:01:19

标签: java database schema datasource derby

我创建了一个名为'movie_db'的数据库,将默认架构设置为APP。 然后创建了一个名为“USERS”的样本表。

我与DB的连接如下:

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">

    <property name="driverClassName" value="org.apache.derby.jdbc.ClientDriver"/>
    <property name="url" value="jdbc:derby://localhost:1527/movie_db"/>        
    <property name="username" value="root"/>
    <property name="password" value="pass"/>
</bean>

现在我想编写一些测试并尝试执行以下查询:

SELECT * FROM USERS;

我得到了什么:

java.sql.SQLSyntaxErrorException: Table/View 'USERS' does not exist.

当我准确指定我正在使用的架构时:

SELECT * FROM APP.USERS

一切正常。

如何在查询中省略模式名称?

更新 就像Bryan说的那样,我创建了一个名为默认模式的用户,并通过此登录进行授权。这是在查询中省略模式名称的最简单方法。但是,如果我想使用多个模式,唯一的方法是明确设置模式。

1 个答案:

答案 0 :(得分:7)

基本上有两种方法可以控制默认架构名称:

  1. 连接到数据库后发出SET SCHEMA语句。
  2. 以与您要使用的架构同名的用户身份登录。
  3. 如果您尚未发出SET SCHEMA语句,则Derby将使用您的用户名作为模式名称。

    因此,如果您以“APP”用户身份登录,并且未发出SET SCHEMA语句,那么您的架构名称将为APP。