/* * Copyright 2004-2011 H2 Group. Multiple-Licensed under the H2 License, * Version 1.0, and under the Eclipse Public License, Version 1.0 * (http://h2database.com/html/license.html). * Initial Developer: H2 Group */ package org.h2.samples; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; import org.h2.store.fs.FileUtils; import org.h2.tools.Backup; import org.h2.tools.DeleteDbFiles; /** * This sample application shows how to create and use a read-only database in a * zip file. The database file is split into multiple smaller files, to speed up * random-access. Splitting up the file is only needed if the database file is * larger than a few megabytes. */ public class ReadOnlyDatabaseInZip { /** * This method is called when executing this sample application from the * command line. * * @param args the command line parameters */ public static void main(String... args) throws Exception { // delete all files in this directory FileUtils.deleteRecursive("~/temp", false); Connection conn; Class.forName("org.h2.Driver"); // create a database where the database file is split into // multiple small files, 4 MB each (2^22). The larger the // parts, the faster opening the database, but also the // more files. 4 MB seems to be a good compromise, so // the prefix split:22: is used, which means each part is // 2^22 bytes long conn = DriverManager.getConnection( "jdbc:h2:split:22:~/temp/test"); System.out.println("adding test data..."); Statement stat = conn.createStatement(); stat.execute( "create table test(id int primary key, name varchar) " + "as select x, space(1000) from system_range(1, 2000)"); System.out.println("defrag to reduce random access..."); stat.execute("shutdown defrag"); conn.close(); System.out.println("create the zip file..."); Backup.execute("~/temp/test.zip", "~/temp", "", true); // delete the old database files DeleteDbFiles.execute("split:~/temp", "test", true); System.out.println("open the database from the zip file..."); conn = DriverManager.getConnection( "jdbc:h2:split:zip:~/temp/test.zip!/test"); // the database can now be used conn.close(); } }