hsqldb的存储方式

Maven依赖

<dependency>
    <groupId>org.hsqldb</groupId>
    <artifactId>hsqldb</artifactId>
    <version>2.5.0</version>
</dependency>

一、内存(mem)存储方式

jdbc:hsqldb:mem:testdb

    @Test
    public void testMem() throws ClassNotFoundException, SQLException {
        Class.forName("org.hsqldb.jdbc.JDBCDriver");
//        String hsqldbMemUrl = "jdbc:hsqldb:mem:.";
        String url = "jdbc:hsqldb:mem:testdb";
        Connection connection = DriverManager.getConnection(url, "SA", "");
        Statement statement = connection.createStatement();
        statement.execute("CREATE TABLE student (id INTEGER, name VARCHAR(10))");
        statement.execute("INSERT INTO student VALUES (1, 'zhang1')");
        statement.execute("INSERT INTO student VALUES (2, 'zhang2')");

        ResultSet rs = statement.executeQuery("SELECT * FROM student");
        while (rs.next()) {
            int col1 = rs.getInt(1);
            String col2 = rs.getString(2);
            System.out.println(String.format("%s %s", col1, col2));
        }

        rs.close();
        statement.close();
        connection.close();
    }

二、文件(file)存储方式

jdbc:hsqldb:file:/home/zxm/hsqldb/testdb

    @Test
    public void testFile() throws ClassNotFoundException, SQLException {
        Class.forName("org.hsqldb.jdbc.JDBCDriver");
        String url = "jdbc:hsqldb:file:/home/zxm/hsqldb/testdb";
        Connection connection = DriverManager.getConnection(url, "SA", "");
        Statement statement = connection.createStatement();
        statement.execute("CREATE TABLE student (id INTEGER, name VARCHAR(10))");
        statement.execute("INSERT INTO student VALUES (1, 'zhang1')");
        statement.execute("INSERT INTO student VALUES (2, 'zhang2')");

        ResultSet rs = statement.executeQuery("SELECT * FROM student");
        while (rs.next()) {
            int col1 = rs.getInt(1);
            String col2 = rs.getString(2);
            System.out.println(String.format("%s %s", col1, col2));
        }

        rs.close();
        statement.close();
        connection.close();
    }

会在file:/home/zxm/hsqldb/testdb下保存数据

三、资源(res)存储方式

jdbc:hsqldb:res:testdb

它mem与file方式的结合,是从classpath下读取数据

可以把file方式生成的testdb.properties和 testdb.script放在classpath下,用res方式可以读取到数据,数据库启动的时候会去这两个文件里读取数据进行初始化,但不会生成testdb.log和testdb.lck,以后进行的所有操作就都在内存里了,关闭数据库也不会写入testdb.script

    @Test
    public void testRes() throws ClassNotFoundException, SQLException {
        Class.forName("org.hsqldb.jdbc.JDBCDriver");
        String url = "jdbc:hsqldb:res:testdb";
        Connection connection = DriverManager.getConnection(url, "SA", "");
        Statement statement = connection.createStatement();
//        statement.execute("CREATE TABLE student (id INTEGER, name VARCHAR(10))");
//        statement.execute("INSERT INTO student VALUES (1, 'zhang1')");
//        statement.execute("INSERT INTO student VALUES (2, 'zhang2')");

        ResultSet rs = statement.executeQuery("SELECT * FROM student");
        while (rs.next()) {
            int col1 = rs.getInt(1);
            String col2 = rs.getString(2);
            System.out.println(String.format("%s %s", col1, col2));
        }

        rs.close();
        statement.close();
        connection.close();
    }

四、服务器模式

jdbc:hsqldb:hsql://localhost:9001/testdb

    public static void main(String[] args) {
        Server server = new Server();
        server.setDatabaseName(0, "testdb");
        server.setDatabasePath(0, "/home/zxm/hsqldb/testdb");
        server.setPort(9001);
        server.setSilent(true);
        server.setTrace(true);
        server.start();
    }

    @Test
    public void testHSQLConnect() throws ClassNotFoundException, SQLException {
        Class.forName("org.hsqldb.jdbc.JDBCDriver");
        String url = "jdbc:hsqldb:hsql://localhost:9001/testdb";
        Connection connection = DriverManager.getConnection(url, "SA", "");
        Statement statement = connection.createStatement();
        statement.execute("CREATE TABLE student (id INTEGER, name VARCHAR(10))");
        statement.execute("INSERT INTO student VALUES (1, 'zhang1')");
        statement.execute("INSERT INTO student VALUES (2, 'zhang2')");

        ResultSet rs = statement.executeQuery("SELECT * FROM student");
        while (rs.next()) {
            int col1 = rs.getInt(1);
            String col2 = rs.getString(2);
            System.out.println(String.format("%s %s", col1, col2));
        }

        rs.close();
        statement.close();
        connection.close();
    }

五、Web服务器模式

jdbc:hsqldb:http://localhost:9001/testdb

    public static void main(String[] args) {
        WebServer webServer = new WebServer();
        webServer.setDatabaseName(0, "testdb");
        webServer.setDatabasePath(0, "/home/zxm/hsqldb/testdb");
        webServer.setPort(9001);
        webServer.setSilent(true);
        webServer.setTrace(true);
        webServer.start();
    }

    @Test
    public void testHSQLConnect() throws ClassNotFoundException, SQLException {
        Class.forName("org.hsqldb.jdbc.JDBCDriver");
        String url = "jdbc:hsqldb:http://localhost:9001/testdb";
        Connection connection = DriverManager.getConnection(url, "SA", "");
        Statement statement = connection.createStatement();
        statement.execute("CREATE TABLE student (id INTEGER, name VARCHAR(10))");
        statement.execute("INSERT INTO student VALUES (1, 'zhang1')");
        statement.execute("INSERT INTO student VALUES (2, 'zhang2')");

        ResultSet rs = statement.executeQuery("SELECT * FROM student");
        while (rs.next()) {
            int col1 = rs.getInt(1);
            String col2 = rs.getString(2);
            System.out.println(String.format("%s %s", col1, col2));
        }

        rs.close();
        statement.close();
        connection.close();
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值