2010-03-14 4 views
14

Il y a un fichier h2-base de données dans mon répertoire src (Java, Eclipse): h2test.dbh2 base de données (mode intégré) fichiers problème

Le problème:

  • à partir du h2.jar à partir de la ligne de commande (et donc l'interface du navigateur h2 sur le port 8082), j'ai créé 2 tables, 'test1' et 'test2' dans h2test.db et j'ai mis quelques données dedans; Lorsque j'essaie d'y accéder à partir du code java (JDBC), il me lance "exception de table introuvable". Un "show tables" du code java montre un resultset avec 0 lignes. En outre, lors de la création d'une nouvelle table ('newtest') à partir du code Java (CREATE TABLE ... etc), je ne peux pas le voir lors du démarrage de l'interface du navigateur h2.jar par la suite; seulement les deux autres tables ('test1' et 'test2') sont montrées (mais alors la table nouvellement créée 'newtest' est accessible depuis le code java).

Je n'ai pas d'expérience avec les bases de données intégrées; Je crois que je fais quelque chose de fondamentalement faux ici. Mon hypothèse est, que j'accède au même fichier - une fois de l'application java, et une fois de l'interface de la console-navigateur h2. Je n'arrive pas à le comprendre, qu'est-ce que je fais de mal ici?

EDIT: comme l'a demandé, en ajoutant un code:

code Java:

Class.forName("org.h2.Driver"); 
String url = "jdbc:h2:" + "db/h2test.db"; 
String user = "aeter"; 
String password = "aeter"; 
Connection conn = DriverManager.getConnection(url, user, password); 
PreparedStatement ps2 = conn.prepareStatement("Show tables;"); 
ResultSet rs = ps2.executeQuery();

Ce resultset a 0 lignes (pas tables), au lieu de me montrer les 2 tables.

H2 paramètres d'interface Console-navigateur:

Settings: Generic h2(embedded) 
driver class: org.h2.Driver 
JDBC URL: jdbc:h2:../../workspace/project_name/src/db/h2test.db 
user name: aeter 
password: aeter 

EDIT2: J'ai copié la base de données dans un nouveau dossier. Maintenant, le fichier db dans le nouveau dossier est affiché avec la table 'newtest' (à partir du code java) et avec les tables 'test1' et 'test2' (à partir de l'interface console-browser h2) - exactement de la même manière le fichier a été montré. Ainsi, le problème persiste avec la copie du fichier db.

Répondre

14

Pour le mode intégré, vous devez vérifier le chemin. Par exemple, utiliser un chemin relatif à votre répertoire personnel:

"jdbc:h2:file:~/db/h2test.db" 

Pour être sûr, utiliser un chemin complet:

"jdbc:h2:file:/users/aeter/db/h2test.db" 

Pour plus de commodité, ajoutez ;IFEXISTS=TRUE pour éviter de créer des fichiers de base de données parasites.

Voir Connecting to a Database using JDBC pour plus d'informations.

H2 Server Les URL sont relatives au -baseDir spécifié comme paramètre à main().

+0

@Lubos: le lien est mort – Chris

+0

@Lubos: Le résultat est "301 déplacé définitivement". – trashgod

1

vous pouvez également aimer ce

"jdbc:h2:file:db/h2test.db" 

alors java ressemble dossier db à partir du dossier de projet

->projectName // project folder 
-->src  // src folder 
-->db   // here your database folder 
-->.... 
1

Si vous utilisez Hibernate essayez ceci dans le fichier hibernate.cfg.xml:

<property name="connection.url">jdbc:h2:file:db/h2test</property> 

sans l'extension * .db à la fin

3

Il peut également y avoir un problème si vous utilisez des paramètres spéciaux dans votre URL JDBC, le nom de fichier de base de données peut différer pour différents cas.

Dans mon cas, j'avais deux URL:

  • jdbc: h2: ~/XXX; MVCC = FAUX; MV_STORE = FAUX
  • jdbc: h2: ~/XXX

Ce premier cas a créé le fichier XXX.h2.db, le second, XXX.mv.db, méfiez-vous.

+0

Ces fichiers mv.db sont activés par défaut depuis h2 Version 1.4.177 Beta (2014-04-12) Données probantes: http://www.h2database.com/html/changelog.html?highlight=mv_store – Reborn

Questions connexes