小白新手web开发简单总结(七)-数据库HSQLDB

目录

一 前言

二 HSQLDB

1.什么是HSQLDB

2.HSQLDB的安装

三 HSQLDB数据库引擎

1. 服务器(Server)模式

Server模式

 WebServer模式

Servlet模式

2.进程模式(In-Process)

3.内存(Memory-Only)模式

4.小结

四 HSQLDB数据库驱动

五 HSQLDB数据库用户操作界面

1.配置HSQLDB数据库工具

2.其他工具

六 总结


一 前言

上一个小白新手web开发简单总结(六)-Spring的IoC容器主要总结了什么是Spring。在web应用开发的过程中,离不开读写数据库。数据库分为关系型数据库和非关系型数据库。

关系型数据库有二维表以及直接的联系(元组、属性、域、关键字等)组成的一个数据结构。这个二维表就是通常所说的表名;元组就是表中的每一行,通常被称为记录;属性即表中的每一列,通常被称为字段;域就是属性的一个取值范围;关键字就是主键,通常有一列或多列组成。

常见的关系型数据库有:Oracle、MySQL、PosgreSQL、SQLite、SQL Server、sqlite等。

Java程序提供JDBC接口来访问关系型数据库通常需要下面的几个步骤:

  public static void main(String[] args) {
        String url = "";
        String user = "";
        String password = "";
        /**
         *  表示一个数据库的连接
         */
        Connection connection = null;
        /**
         * 执行数据库SQL语句,并返回相应结果的对象,其中Statement有两个子接口:
         * PreparedStatement:预编译对象,用于解决sql的注入问题;
         * CallableStatement:支持带参数的SQL操作,支持调用存储过程,是PreparedStatement的子接口
         */
        Statement statement;
        /**
         * 用来存储执行SQL语句返回的结果
         */
        ResultSet set;
      
        //1.初始化JDBC驱动
        try {
          
            Class.forName("org.hsqldb.jdbcDriver");
        } catch (ClassNotFoundException e) {
            System.out.println("ERROR:failed to load jdbc driver");
            return;
        }
        //2.开始读取相关的数据库文件
        try {
            //(1).使用DriverManager来注册驱动,创建数据库的连接对象Connection
            connection = DriverManager.getConnection(url, user, password);
            //(2).通过Connection获得执行数据库语句的对象Statement
            statement = connection.createStatement();
            //(3).创建一个查询语句,返回查询的结果
            set = statement.executeQuery("select * from user");
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

非关系型数据库以键值对存储,结构不固定,每个元组可以有不一样的字段,每个元组可根据需要增加自己的键值对。

常见的非关系型数据库有key-value结构的Memcached、存储JSON的MongoDB、专门用于搜索数据内容的NoSQL的Splunk等。

而本次先简单的去学习下关系型数据库中的HSQLDB数据库。

二 HSQLDB

1.什么是HSQLDB

HSQLDB(HyperSQL Database),一个开源的java数据库,具有标准的SQL语法和Java接口。体积小,无需进行复杂的数据库配置,就可以使用,适合用于小型数据。

官网提供的jar包就包括了数据库引擎( HyperSQL RDBMS Engine (HSQLDB))数据库驱动( HyperSQL JDBC Driver)其他用户界面操作( Database Manager、Sql Tool等)

一个HSQLDB被称为一个catalog,通常包含2-6个文件,位于相同目录下,只是扩展名不同而已:

  • .properties:数据库的基本配置
  • .script:表和其他数据库对象的定义
  • .log:数据库最近的改动
  • .data:缓冲表的数据
  • .backup:数据文件的备份压缩文件,保存的是上次的最终状态数据。

如果没有缓冲表(cached table),则.data和.backup是不会存在的。

2.HSQLDB的安装

只要支持JDK即可。在官网下载相应的.zip,解压到任一目录即可。

  • (1)直接进入官网 http://hsqldb.org,点击下图所示的链接的地方:

  • (3)下载解压之后,如图所示,其中的核心jar包hsqldb.jar就在lib目录下。

 通常将创建的数据库文件存放到data目录下,lib目录存放着核心hsqldb.jar包,通过该jar包来启动和管理HSQLDB数据库。

三 HSQLDB数据库引擎

所谓的数据库引擎就是用于存储、处理和保护数据的核心部分。利用数据库引擎可控制访问权限并快速处理事务。通过数据引擎来访问数据库文件。而HSQLDB的数据库引擎分为三种模式:服务器(Server)模式、进程模式(In-Process)、内存(Memory-Only)模式。

1. 服务器(Server)模式

单独会启动一个JVM来提供数据库服务,就像Oracle、MySql等数据库一样,数据库启动后作为一个服务器存在,web应用可以通过JDBC驱动连接该数据库服务。最多可指定10个数据库连接。

服务器模式又分为Server模式、WebServer模式、Servlet模式。

Server模式

  • (1)通信协议

采用HSQLDB的专有的通信协议。

  • (2)创建或连接数据库

通过hsqldb.jar创建或者连接一个数据库(如果不存在的数据库则新建,如果已经存在的数据库仅做连接)如下:

在data目录下执行如下命令:

MacBook-Pro:data j1$ java -cp ../lib/hsqldb.jar  org.hsqldb.Server -database.0 ./ec-goods/book -dbname.0 xbook

-database.n表示的数据库文件的地址以及名字,支持相对路径,后面紧跟的是“数据库的地址/数据库名字”;

-dbname.n表示数据库文件的别名,在代码中通过该别名访问数据库。

-databse和-dbname后面的.n表示可以创建或连接多个数据库,最多支持的个数为10个。示例一下一次创建或连接多个数据库:

MacBook-Pro:data j1$ java -cp ../lib/hsqldb.jar  org.hsqldb.Server -database.0 ./ec-goods/book -dbname.0 xbook -database.1 ./ec-goods1/book1 -dbname.1 xbook1
[Server@87aac27]: Startup sequence initiated from main() method
[Server@87aac27]: Could not load properties from file
[Server@87aac27]: Using cli/default properties only
[Server@87aac27]: Initiating startup sequence...
[Server@87aac27]: Server socket opened successfully in 9 ms.
[Server@87aac27]: Database [index=0, id=0, db=file:./ec-goods1/book1, alias=xbook1] opened successfully in 255 ms.
[Server@87aac27]: Database [index=1, id=1, db=file:./ec-goods/book, alias=xbook] opened successfully in 27 ms.
[Server@87aac27]: Startup sequence completed in 291 ms.
[Server@87aac27]: 2021-02-24 06:25:55.081 HSQLDB server 2.5.1 is online on port 9001
[Server@87aac27]: To close normally, connect and execute SHUTDOWN SQL
[Server@87aac27]: From command line, use [Ctrl]+[C] to abort abruptly

在进入到data目录下,发现以及添加了这两张表,而每张表对应的文件也就是我们在第二部分中提到的那几个文件,其中.lok表示数据库处于打开状态。

  • (3)代码获取Connection实例

该模式的jdbc-url为:jdbc:hsqldb:hsql://localhost/数据库别名,代码获取Connection实例如下:

 Connection connection = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/xbook", user, password);

 WebServer模式

  • (1)通信协议

HTTP协议。主要用于防火墙,默认端口为9001

  • (2)创建或连接数据库

还是通过hsqldb.jar在data目录下执行命令,只不过org.hsqldb.Server换成 org.hsqldb.server.WebServer,如图:

MacBook-Pro:data j1$ java -cp ../lib/hsqldb.jar   org.hsqldb.server.WebServer -database.0 ./ec-goods/book -dbname.0 xbook
  • (3)代码获取Connection实例

该模式的jdbc-url为:jdbc:hsqldb:http://localhost/数据库别名,代码示例如下:

 Connection connection = DriverManager.getConnection("jdbc:hsqldb:http://localhost/xbook", user, password);

Servlet模式

与WebServer模式相同,同样采用的是HTTP协议作为通信协议。主要是为Tomcat等以Servlet容器的应用服务器提供数据库的访问。并且创建的数据库不能脱离Servlet引擎服务器,必须将Hsqldb.jar包中的Servlet类放到应用服务器的相应位置。

通常应用服务器的数据库引擎不会采用这种模式。

该模式的jdbc-url为:也为jdbc:hsqldb:http://localhost/数据库别名

2.进程模式(In-Process)

  • (1)通信方式

又称为Standalone模式。数据作为应用程序一部分,运行在同一JVM中。不需要通过数据转换和网络传递,直接以文件的方式进行操作,访问速度快,所有的数据都会写入到文件中,关闭数据库后,数据仍然保留。

但这种模式只能在当前应用程序中使用,当该应用程序启动后,其他应用不可访问数据库的内容。

  • (2)创建或连接数据库

相比较于服务器模式,这种方式当通过DriverManager获取Connection的时候,就会创建数据库。

   Connection connection = DriverManager.getConnection("jdbc:hsqldb:file:user", user, password);

 这里的jdbc-url为:dbc:hsqldb:file:路径/数据库表名。路径既可以支持绝对路径,也支持相对路径:也就是说:

jdbc:hsqldb:file:user:工程的当前目录下创建user表

"jdbc:hsqldb:file:db/user":工程的当前目录的db目录下创建user表

"jdbc:hsqldb:file:/Users/j1/Documents/java/db/user":在本地目录下创建user表

“jdbc:hsqldb:res:org.my.path.resdb":这种情况就是一般读取的在一些Java资源文件中的数据库,例如Jar包,一般都是只读。这个org.my.path就是resdb所在的包路径

另外在该jdbc-url的后面,不指定ifexists=true时,连接的数据库不存在时自动创建新的数据库。没有指定username和password时, 默认 SA 和空密码。

3.内存(Memory-Only)模式

所有的数据库都在内存中完成,如果程序退出,则相应的数据库也被同时被摧毁。创建或连接数据库的方式同进程模式,只不过jdbc-url为:jdbc:hsqldb:mem:数据库表名

4.小结

通过上面提到的三种模式,就可以获取的一个数据库的连接Connection,从Connection中在获取到Statement, 那么就可以通过Statement来执行SQL语句,从而增删改查数据库。

四 HSQLDB数据库驱动

在Hsqldb.jar中提供了HSQLDB JDBC驱动(对应的类名为:org.hsqldb.jdbcDriver)来提供访问数据库文件,一般默认的端口号9001。通常会需要将该类通过.properties文件配置到项目中

jdbc.driverClassName=org.hsqldb.jdbcDriver
jdbc.url=jdbc:hsqldb:hsql://localhost:9001/xbook
jdbc.username=sa
jdbc.password=

或直接通过代码的方式来加载该JDBC驱动类。

        //1.初始化JDBC驱动
        try {
          
            Class.forName("org.hsqldb.jdbcDriver");
        } catch (ClassNotFoundException e) {
            System.out.println("ERROR:failed to load jdbc driver");
            return;
        }

然后在根据根据不同的数据库的引擎模式,分别使用对应的jdbc-url来进行访问数据库文件。

五 HSQLDB数据库用户操作界面

当然HSQLDB也提供了一些用户可以操作的界面来帮助操作数据库。

1.配置HSQLDB数据库工具

org.hsqldb.util.DatabaseManager和org.hsqldb.util.DatabaseManagerSwing,两个都可以进行配置和管理数据库,界面有所差异。在命令窗口中(如果当前创建的是服务器模式的数据库,那么需要另外重新开一个命令窗口来执行命令)可以直接通过运行hsqldb.jar来打开这两个工具,之后就可以通过界面化的方式来操作界面了。通常有下面几个操作过程:

  • (1)需要根据设置的数据库引擎模式来选择对应的Type,URL后面设置对应需要操作的数据库的别名

注意在这里设置User和Password会报错,后面在去看看到底怎么设置User和Password。User默认的是SA,Password为空。

  • (2)如果熟悉SQL语句的可以直接在右侧的输入框输入,如果不熟悉SQL语句可以借助Commond中提供的模版示例或者右键点击对应的表可自动添加SQL语句。

  • (3)当执行成功SQL语句,则如图显示:

 通过该工具可以方便的对数据库进行增删改查。

2.其他工具

在官方API文档中,看到还提供还会提供下面的几个工具:

org.hsqldb.util.Transfer

org.hsqldb.util.QueryTool

org.hsqldb.util.SqlTool

六 总结

通过上面的部分简单的了解了HSQLDB的基本知识,简单总结下:

1.HSQLDB包括数据库引擎、数据库驱动以及用户可操作界面工具;

2.HSQLDB无需安装,只需要从官网下载最新的.zip,解压放到电脑的任一目录即可;

3.HSQLDB数据库引擎分为三种模式:服务器模式、内存模式以及进程模式;

(1)服务器模式是将数据库运行在一个单独的JVM中,又分为Server模式、WebServer模式、Servlet模式;

  • Server模式使用HSQLDB专有的通信协议,对应的启动类为org.hsqldb.server,jdbc-url:jdbc:hsqldb:hsql://localhost/数据库别名
  • WebServer模式使用HTTP进行通信,对应的启动类为 org.hsqldb.server.WebServer,jdbc-url:jdbc:hsqldb:http://localhost/数据库别名
  • Servlet模式和WebServer模式类似,只不过Servlet模式是可以让Servlet容器的应用服务器进行访问数据库

(2)内存模式是创建的数据库只能运行在内存中,当应用程序关闭时,相应的数据库数据也跟着销毁,当通过Connection就可以创建数据库,jdbc-url为:jdbc:hsqldb:mem:数据库表名

(3)进程模式是创建的数据库运行在应用程序进程中,数据库会以文件的形式存在,当应用程序关闭,该数据库仍然存在,但是当应用程序运行的时候,只能当前应用程序访问该数据库,其他的均不能访问

4.HSQLDB也提供了数据库驱动:org.hsqldb.jdbcDriver,可以通过代码或者配置文件加载该驱动,从而让应用程序可以访问HSQLDB数据库文件;

5.HSQLDB也提供了用户操作界面的DatabaseManager和DatabaseManagerSwing,来让用户可以操作数据库,两者功能一致,只是界面有所不同;

后面在看下怎么设置用户名和密码以及通过一个java实例,系统的看下应用程序访问数据库的一个流程,见小白新手web开发简单总结(八)-数据库HSQLDB实例

猜你喜欢

转载自blog.csdn.net/nihaomabmt/article/details/113995051