2013-03-31 69 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中的數據源塊中爲我的連接池設置默認模式。我不想硬編碼我的模式。 –