aeter
aeter

Reputation: 12720

h2 (embedded mode ) database files problem

There is a h2-database file in my src directory (Java, Eclipse): h2test.db

The problem:

I'm inexperienced with embedded databases; I believe I'm doing something fundamentally wrong here. My assumption is, that I'm accessing the same file - once from the java app, and once from the h2 console-browser interface. I cannot seem to understand it, what am I doing wrong here?

EDIT: as requested, adding some code:

Java code:

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

This resultset has 0 rows (no tables), instead of showing me the 2 tables.

H2 Console-browser interface settings:

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: I copied the database to a new folder. Now the db file in the new folder is shown with the 'newtest' table (from the java code) and with the 'test1' and 'test2' tables (from the console-browser h2 interface) - exactly the same way the older db file was shown. So the problem persists with the copy of the db file.

Upvotes: 15

Views: 31257

Answers (4)

voho
voho

Reputation: 2905

Also there can be a problem if you use some special parameters in your JDBC url, the database file name can differ for various cases.

In my case, I had two URLs:

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

This first case created XXX.h2.db file, the second one XXX.mv.db, beware.

Upvotes: 3

Aconic
Aconic

Reputation: 737

If you are using Hibernate try this in hibernate.cfg.xml file:

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

without *.db extension at the end

Upvotes: 1

shms
shms

Reputation: 79

Also you can like this

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

then java looks db folder from project folder

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

Upvotes: 1

trashgod
trashgod

Reputation: 205875

For embedded mode, you'll need to check the path. For example, use a path relative to your home directory:

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

To be sure, use a full path:

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

For convenience, append ;IFEXISTS=TRUE to avoid creating spurious database files.

See Connecting to a Database using JDBC for more.

H2 Server URLs are relative to the -baseDir specified as a parameter to main().

Upvotes: 15

Related Questions