2013-03-31 14 views
5

Ho creato un database denominato 'movie_db', impostare lo schema predefinito su APP. Quindi ha creato una tabella di esempio denominata "UTENTI".Ometti lo schema nella query DERBY

La mia connessione a DB è la seguente:

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

Ora voglio scrivere alcuni test e provare a eseguire la seguente query:

SELECT * FROM USERS; 

Cosa ottengo:

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

Quando specifico esattamente lo schema che sto usando:

SELECT * FROM APP.USERS 

tutto funziona correttamente.

Come posso omettere il nome dello schema nella mia query?

UPDATE: Come Bryan ha detto, ho creato un utente con il nome del mio schema predefinito e autorizzo con questo login. Questo è il modo più semplice per omettere il nome dello schema nella query. Ma ancora se voglio usare più schemi l'unico modo è di impostare lo schema in modo esplicito.

risposta

6

ci sono fondamentalmente due modi per controllare il nome dello schema predefinito:

  1. emettere l'istruzione SET SCHEMA dopo aver collegato al database.
  2. Accedere come utente con lo stesso nome dello schema che si desidera utilizzare.

Se non è stata emessa un'istruzione SET SCHEMA, Derby utilizzerà il nome utente come nome dello schema.

Quindi, se si effettua il login come utente "APP" e non si emette un'istruzione SET SCHEMA, il nome dello schema sarà APP.

+0

Posso impostare esplicitamente schema nel mio bean? Ho provato impostando la proprietà e aggiungendo la coppia chiave-valore nell'URL, ma questo non ha funzionato per me. E se non è possibile dove esattamente è il modo migliore per impostare lo schema predefinito? All'interno di ogni metodo per accedere al DB della classe DAO? –

+0

SET SCHEMA è un'istruzione SQL; è necessario inviare tale istruzione al database utilizzando l'API JDBC. Sembra che la tua vera domanda riguardi come ottenere tali istruzioni SQL emesse dalla libreria Object/Relational, che non è in realtà un problema Derby, ma un problema di libreria O/R. –

+0

No, ho capito che lo schema set è un'istruzione sql :) Prima di tutto, ora non sto usando orm, ma questa non è una mia domanda. In realtà non capisco perché non riesco a impostare lo schema predefinito per il pool delle mie connessioni all'interno del blocco dell'origine dati nel contesto dell'app. L'ID non vuole hardcode il mio schema. –