【问题标题】:Omit schema in the DERBY Query在 DERBY 查询中省略模式
【发布时间】:2013-03-22 00:47:35
【问题描述】:

我创建了一个名为“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 说的,我用我的默认模式的名称创建了一个用户,并使用这个登录名进行授权。这是在查询中省略模式名称的最简单方法。但是,如果我想使用多个模式,唯一的方法就是显式设置模式。

【问题讨论】:

    标签: java database schema datasource derby


    【解决方案1】:

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

    1. 连接到数据库后发出 SET SCHEMA 语句。
    2. 以与您要使用的架构同名的用户身份登录。

    如果您尚未发出 SET SCHEMA 语句,那么 Derby 将使用您的用户名作为架构名称。

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

    【讨论】:

    • 我可以在我的 bean 中显式设置模式吗?我尝试通过设置属性并在 url 中添加键值对,但这对我不起作用。如果不可能,那么设置默认架构的最佳方式到底是哪里?在DAO类的各个访问DB的方法里面?
    • SET SCHEMA 是一条 SQL 语句;您需要使用 JDBC API 将该语句发送到数据库。听起来您真正的问题涉及如何获取对象/关系库发出的此类 SQL 语句,这实际上不是 Derby 问题,而是 O/R 库问题。
    • 不,我知道 set schema 是一个 sql 语句 :) 首先,现在我没有使用 orm,但这不是我的问题。我实际上不明白为什么我不能在应用程序上下文的数据源块内为我的连接池设置默认架构。我不想硬编码我的架构。
    • 我解决了同样的问题,但使用了特定的 WAS 替代方案:stackoverflow.com/questions/19032112/… 不知道您是否可以在您的环境中做同样的事情。
    • 第二个声明的官方文档是here
    猜你喜欢
    • 1970-01-01
    • 2022-08-11
    • 1970-01-01
    • 2015-02-07
    • 2020-08-23
    • 2012-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多