2010-03-14 10 views
14

C'è un file h2 database nella mia directory src (Java, Eclipse): h2test.dbh2 (modalità embedded) del database file di problema

Il problema:

  • iniziare il h2.jar dalla riga di comando (e quindi dall'interfaccia del browser h2 sulla porta 8082), ho creato 2 tabelle, 'test1' e 'test2' in h2test.db e ho inserito alcuni dati in esse;

  • quando si tenta di accedervi dal codice java (JDBC), mi lancia "tabella non trovata eccezione". Una "mostra tabelle" dal codice java mostra un set di risultati con 0 righe.

  • Inoltre, quando si crea una nuova tabella ('newtest') dal codice java (CREATE TABLE ... ecc.), Non riesco a vederlo quando si avvia successivamente l'interfaccia del browser h2.jar; solo le altre due tabelle ('test1' e 'test2') sono mostrate (ma poi la tabella appena creata 'newtest' è accessibile dal codice java).

Sono inesperto con database incorporati; Credo che sto facendo qualcosa di fondamentalmente sbagliato qui. La mia ipotesi è che acceda allo stesso file, una volta dall'app java e una volta dall'interfaccia h2 console-browser. Non riesco a capirlo, cosa sto sbagliando qui?

EDIT: come richiesto, l'aggiunta di un po 'di codice:

codice 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();

Questo gruppo di risultati ha 0 righe (senza tabelle), invece di mostrarmi i 2 tavoli.

H2 impostazioni di interfaccia della console browser:

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: ho copiato il database in una nuova cartella. Ora il file db nella nuova cartella viene mostrato con la tabella 'newtest' (dal codice java) e con le tabelle 'test1' e 'test2' (dall'interfaccia h2 della console-browser) - esattamente allo stesso modo del vecchio db il file è stato mostrato. Quindi il problema persiste con la copia del file db.

risposta

14

Per la modalità incorporata, è necessario controllare il percorso. Ad esempio, utilizzare un percorso relativo alla vostra directory home:

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

A dire il vero, utilizzare un percorso completo:

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

Per comodità, aggiungere ;IFEXISTS=TRUE per evitare di creare file di database spurie.

Vedere Connecting to a Database using JDBC per ulteriori informazioni.

H2 Server Gli URL sono relativi allo -baseDir specificato come parametro su main().

+0

@Lubos: il collegamento è morto – Chris

+0

@Lubos: il risultato è "301 Spostati permanentemente". – trashgod

1

Inoltre si può, come questo

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

quindi java guarda cartella db dalla cartella del progetto

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

Se si utilizza Hibernate provare questo nel file di hibernate.cfg.xml:

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

senza estensione * .db alla fine

3

Inoltre può esserci un problema se si utilizzano alcuni parametri speciali nell'URL JDBC, il nome del file di database può essere diverso per vari casi.

Nel mio caso, ho avuto due URL:

  • JDBC: H2: ~/XXX; MVCC = FALSE; MV_STORE = FALSE
  • jdbc: H2: ~/XXX

Questo primo caso ha creato il file XXX.h2.db, il secondo XXX.mv.db, attenzione.

+0

Questi file mv.db sono abilitati di default poiché h2 Versione 1.4.177 Beta (2014-04-12) Evidenza: http://www.h2database.com/html/changelog.html?highlight=mv_store – Reborn

Problemi correlati