2013-03-31 57 views
5

我已经创建了一个名为'movie_db'的数据库,将默认模式设置为APP。 然后创建一个名为'USERS'的示例表。在DERBY查询中省略模式

我对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 

一切工作正常。

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

UPDATE: 像布赖恩说,我创建了一个用户与我的默认架构的名称以及与此登录授权。这是在查询中省略模式名称的最简单方法。但是,如果我想使用多个模式,唯一的方法是明确地设置模式。

回答

6

基本上有两种方式来控制缺省模式名称:

  1. 问题已连接到数据库后,SET SCHEMA语句。
  2. 以与您希望使用的模式同名的用户登录。

如果您还没有发出SET SCHEMA语句,那么Derby将使用您的用户名作为模式名称。

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

+0

我可以在我的bean中显式设置模式吗?我试着通过设置属性并在url中添加键值对,但那对我没有用。如果不可能,设置默认模式的最佳方式是什么?在访问DAO类的数据库的每种方法中? –

+0

SET SCHEMA是一个SQL语句;您需要使用JDBC API将该语句发送到数据库。这听起来像你真正的问题涉及如何获得由对象/关系库发布的这样的SQL语句,这不是真正的Derby问题,而是O/R库问题。 –

+0

不,我知道set schema是一个sql语句:)首先,现在我没有使用orm,但这不是我的问题。我其实不明白为什么我不能在app-context中的数据源块中为我的连接池设置默认模式。我不想硬编码我的模式。 –