Java 在DERBY查询中省略模式

Java 在DERBY查询中省略模式,java,database,schema,datasource,derby,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"

我已经创建了一个名为“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>
我得到的是:

java.sql.SQLSyntaxErrorException: Table/View 'USERS' does not exist.
当我精确指定我正在使用的架构时:

SELECT * FROM APP.USERS
一切正常

如何在查询中省略架构名称

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

基本上有两种方法来控制默认模式名称:

  • 连接到数据库后发出SET SCHEMA语句
  • 以与要使用的架构同名的用户身份登录
  • 如果您还没有发出SETSCHEMA语句,那么Derby将使用您的用户名作为模式名


    所以,如果您以用户“APP”的身份登录,并且没有发出SET SCHEMA语句,那么您的模式名称将是APP。

    我可以在我的bean中显式地设置模式吗?我尝试过设置属性并在url中添加键值对,但这对我来说不起作用。如果不可能,那么设置默认模式的最佳方法是什么?在访问DAO类?集合模式的数据库的每个方法中都有一个SQL语句;您需要使用JDBCAPI将该语句发送到数据库。听起来你真正的问题是如何获取对象/关系库发出的SQL语句,这不是Derby的问题,而是O/R库的问题。不,我知道set schema是SQL语句:)首先,我现在不使用orm,但这不是我的问题。实际上,我不明白为什么我不能在应用程序上下文中为数据源块内的连接池设置默认模式。上的Id不想硬编码我的模式。我解决了相同的问题,但使用了特定的WAS替代方案:不知道您是否可以在您的环境中执行相同的操作。第二个声明的官方文档是。
    SELECT * FROM APP.USERS