2017-09-20 2 views
0

Je travaille sur un projet Java + Spring qui utilise une base de données Derby Embedded pour exécuter une suite de Junits. Je veux être en mesure d'interroger la base de données Embedded en utilisant le client Squirrel SQL au lieu d'y accéder directement via mes tests junit. La raison en est que j'ai affaire à des structures de données très complexes et que l'interrogation avec un éditeur sera très utile pour construire mes cas de test. Lorsque j'exécute mes JUnits dans le débogage, je place un point d'arrêt après l'initialisation de la base de données et je le laisse là, ce qui signifie que la base de données intégrée est créée à ce stade. Ci-dessous montre la configuration du ressort qui relie le DB.Connexion à Derby Embedded DB avec Squirrel

<bean id="targetDataSource" 
    class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="driverClassName" value="org.apache.derby.jdbc.EmbeddedDriver" /> 
    <property name="url" value="jdbc:derby:memory:unitTestDB;create=true" /> 
    <property name="username" value="sa" /> 
    <property name="password" value="" /> 
</bean> 

ci-dessous montre la sortie de la console, la DB est chargée entièrement à ce point ...

Executing SQL script from class path resource [mydb/create-schema.sql] 
Done executing SQL script from class path resource [mydb/create-schema.sql] in 107 ms. 
Executing SQL script from class path resource [mydb/create-sequences.sql] 
Done executing SQL script from class path resource [mydb/create-sequences.sql] in 403 ms. 
Executing SQL script from class path resource [mydb/create-tables.sql] 
Done executing SQL script from class path resource [mydb/create-tables.sql] in 3844 ms. 
Executing SQL script from class path resource [mydb/create-views.sql] 
Done executing SQL script from class path resource [mydb/create-views.sql] in 2118 ms. 
Executing SQL script from class path resource [mydb/MY_TABLE.sql] 
Done executing SQL script from class path resource [mydb/MY_TABLE.sql] in 1380 ms. 

J'utilise le même pilote que ma suite JUnit utilise et a créé un alias qui ressemble à ci-dessous écureuil ...

enter image description here

je peux créer une connexion, mais il semble que écureuil ne peut pas charger des schémas + tables.

enter image description here

Que pourrais-je faire mal ici?

Répondre

1

Je ne pense pas que vous puissiez avoir accès à une instance intégrée par plus d'un processus JVM. Puisque vous avez create = true dans l'URL, il a créé une autre base de données intégrée pour votre client Squirrel. Pour plus d'informations, voir this answer pour plus d'informations.

+0

Intéressant, avait un sentiment quelque chose comme ça se passait. – Jason

+0

Vous avez raison sur le fait qu'une seule instance JVM peut monter une base de données intégrée. Imaginez deux serveurs de base de données essayant de gérer la même base de données sur disque en même temps. C'est la même idée. – Bill