2013-03-31 13 views
5

Utworzono bazę danych o nazwie "movie_db", ustaw domyślny schemat dla aplikacji APP. Następnie utworzono przykładową tabelę o nazwie "UŻYTKOWNICY".Omów schemat w kwerendzie DERBY

Moje połączenia DB jest następujący:

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

Teraz chcę napisać kilka testów i spróbuj wykonać następujące zapytanie:

SELECT * FROM USERS; 

Co dostaję:

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

Po określeniu dokładnie używanego schematu:

SELECT * FROM APP.USERS 

wszystko działa poprawnie.

Jak mogę pominąć nazwę schematu w moim zapytaniu?

UPDATE: jak Bryan powiedział Utworzyłem użytkownika z nazwą mojego domyślnego schematu i autoryzować ten logowania. Jest to najprostszy sposób na pominięcie nazwy schematu w zapytaniu. Ale nadal, jeśli chcę używać wielu schematów, jedynym sposobem jest jawne ustawienie schematu.

Odpowiedz

6

Istnieją dwa sposoby sterowania domyślną nazwę schematu:

  1. wydać oświadczenie SET SCHEMA Po podłączeniu do bazy danych.
  2. Zaloguj się jako użytkownik o takiej samej nazwie jak schemat, którego chcesz użyć.

Jeśli nie wysłano instrukcji SET SCHEMA, to Derby użyje nazwy użytkownika jako nazwy schematu.

Więc jeśli logujesz się jako użytkownik "APP" i nie wydajesz instrukcji SET SCHEMA, to twoja nazwa schematu będzie APP.

+0

Czy mogę jawnie ustawić schemat w moim komponencie bean? Próbowałem przez ustawienie właściwości i dodanie pary klucz-wartość w adresie URL, ale to nie zadziałało. A jeśli nie jest to możliwe, gdzie dokładnie jest najlepszy sposób na ustawienie domyślnego schematu? Wewnątrz każdej metody dostępu do DB klasy DAO? –

+0

SET SCHEMA to instrukcja SQL; musisz wysłać to oświadczenie do bazy danych za pomocą interfejsu API JDBC. Wygląda na to, że twoje prawdziwe pytanie dotyczy tego, jak uzyskać takie instrukcje SQL wydane przez twoją bibliotekę Object/Relational, która tak naprawdę nie jest kwestią Derby, ale problemem biblioteki O/R. –

+0

Nie, Rozumiem, że zestaw schematów jest wyrażeniem sql :) Po pierwsze, teraz nie używam orm, ale to nie jest moje pytanie. Właściwie to nie rozumiem, dlaczego nie mogę ustawić domyślnego schematu dla puli moich połączeń wewnątrz bloku źródła danych w kontekście aplikacji. Nie chcę zakodować mojego schematu. –