I have created a tool called 'localdb' specifically for handling such a case a few years back (and should still be compatible with current H2 versions since no protocol changes were made for the filesystem jdbc access).
Link: https://code.google.com/p/localdb The wiki page contains the how-to information. There was a previous case in the h2-database Google Group in the year of 2011 which you could refer at: https://groups.google.com/forum/#!topic/h2-database/eoId0GtOgUo On Monday, February 10, 2014 3:41:09 PM UTC, Alejandro Villamarin wrote: > > Hi everyone, > > I'm running into a very strange issue, but I'm not sure if it is because > of me or because I'm doing something wrong. Let me depict my scenario. > > I'm trying to use H2 to embed a database in a Java app. If the db does not > exist, should be newly created and saved to disk (file) once the app > finishes. > > That said, and regarding the documentation: > > Creating New Databases > > By default, if the database specified in the URL does not yet exist, a new > (empty) database is created automatically. The user that created the > database automatically becomes the administrator of this database. > > Auto-creating new database can be disabled, see Opening a Database Only > if it Already > Exists<http://h2database.com/html/features.html#database_only_if_exists>. > > > First thing weird enough is that a new database is not created > automatically....at least not in the filesystem, maybe this is done > in-memory (???? not sure, is not specified in the docs). This leads me to > my other question, where does H2 stores the data once finished? I can't see > it anywhere in my filesystem. > > > Here is my code that "creates" the db: > > try { > spath = "jdbc:h2:file:data/sample"; > conn = DriverManager.getConnection(spath, "john", "doe"); > > } > catch (Exception e) { > System.out.println(e.getMessage()); > } > > If right after executing this I look at my relative path + /data....there > is nothing...funny thing is that if I execute this right after: > > try { > Statement stat = conn.createStatement(); > > //create table > stat.execute("CREATE TABLE ACTIVITY (ID INTEGER, STARTTIME > datetime, ENDTIME datetime, ACTIVITY_NAME VARCHAR(200), PRIMARY KEY > (ID))"); > > //prepared statement > PreparedStatement prep = conn.prepareStatement("INSERT INTO > ACTIVITY (ID, STARTTIME, ENDTIME, ACTIVITY_NAME) VALUES (?,?,?,?)"); > > //insert 10 row data > for (int i = 0; i<10; i++){ > prep.setLong(1, i); > prep.setTimestamp(2, new > Timestamp(System.currentTimeMillis())); > prep.setTimestamp(3, new > Timestamp(System.currentTimeMillis())); > prep.setString(4, "Activity-" + i); > > //batch insert > prep.addBatch(); > } > conn.setAutoCommit(false); > prep.executeBatch(); > conn.setAutoCommit(true); > > > > > ResultSet rs = stat.executeQuery("Select STARTTIME, ENDTIME, > ACTIVITY_NAME from ACTIVITY"); > while (rs.next()) { > > Date start = rs.getTimestamp(1); > Date end = rs.getTimestamp(2); > String activityName = rs.getString(3); > > //print query result to console > System.out.println("activity: " + activityName); > System.out.println("start: " + start); > System.out.println("end: " + end); > System.out.println("--------------------------"); > } > rs.close(); > //close connection > conn.close(); > } > catch (SQLException e) { > e.printStackTrace(); > } > > I get this output: > > > activity: Activity-0 > start: 2014-02-10 15:27:07.414 > end: 2014-02-10 15:27:07.418 > -------------------------- > activity: Activity-1 > start: 2014-02-10 15:27:07.418 > end: 2014-02-10 15:27:07.418 > -------------------------- > activity: Activity-2 > start: 2014-02-10 15:27:07.418 > end: 2014-02-10 15:27:07.418 > -------------------------- > activity: Activity-3 > start: 2014-02-10 15:27:07.418 > end: 2014-02-10 15:27:07.418 > -------------------------- > activity: Activity-4 > start: 2014-02-10 15:27:07.418 > end: 2014-02-10 15:27:07.418 > -------------------------- > activity: Activity-5 > start: 2014-02-10 15:27:07.418 > end: 2014-02-10 15:27:07.418 > -------------------------- > activity: Activity-6 > start: 2014-02-10 15:27:07.418 > end: 2014-02-10 15:27:07.418 > -------------------------- > activity: Activity-7 > start: 2014-02-10 15:27:07.418 > end: 2014-02-10 15:27:07.418 > -------------------------- > activity: Activity-8 > start: 2014-02-10 15:27:07.418 > end: 2014-02-10 15:27:07.418 > -------------------------- > activity: Activity-9 > start: 2014-02-10 15:27:07.419 > end: 2014-02-10 15:27:07.419 > -------------------------- > > > Thus, the db seems to exist, but when the connection is closed, I check my > relative path again and there is nothing....I assume H2 is creating the > database in-memory, altough using file when creating the connection. > > Thus, how can I "dump" the in-memory database to file once finished? > > Thanks! > > Alejandro > > > > -- You received this message because you are subscribed to the Google Groups "H2 Database" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/h2-database. For more options, visit https://groups.google.com/groups/opt_out.
