用過HSQLDB一段時間,其作為一個小型數據庫,很是小巧,jar包也就1M多,麻省雖小,五臟俱全。對于一此網站系統或是小型的應用系統,應該足夠滿足要求了,主要是綠色環保,不需要進行安裝,這點我很喜歡,特別是直接打包到web應用里,可以直接使用,用不著更換運行環境后,重新配置數據庫連接。下面就介紹一下hsqldb的一些簡單的使用
下載HSQLDB
首先下載hsqldb,其官方網站為hsqldb.org,目前最新版本是2.4.0,最早用過1.9版本的,就覺得甚是喜歡,主頁界面上有下載的鏈接,就一個壓縮文件包,不需要區分操作系統。下載后解壓即可
目錄結構介紹
bin:存放運行的批處理,可以參照著放入自己的批處理用于啟動或管理數據庫
data:用于存放數據文件的地方,新解壓時為空,后面自己用的時候,可能放在里面,也可以放在其他地方
doc:文檔,與數據庫操作的所有文檔都在里面,很詳細,有什么問題可以在里面找找
lib:jar文件,HSQLDB核心的jar包
sample:一些配置的模板
數據庫啟動
HSQLDB運行分為三種模式,分別為內存模式,進程模式,和服務器模式。
在內存模式下,所有的數據都將在內存中完成,如果程序退出,則相應的數據也將同時被銷毀。連接JDBC的實例為:jdbc:hsqldb:mem:dbname
在進程模式下,是直接以文件方式進行操作,所有文件均寫入文件,關閉數據庫后數據可以保留,這種模式下不能接受其他程序訪問
服務器模式,常用,又分為三種,即Servet,WebServer,Servlet,詳見官方文檔,服務器模式單獨啟動一個JVM用于提供數據庫服務,并開放連接端口,其他程序可以通過jdbc或客戶端連接,這也是在開發和調試中常用的一種方式,在上線運行后,可采用進程模式
以Server方式啟動服務器
修改bin/runServer.bat,另存為myBookServer
cd ..\data
@java -classpath ../lib/hsqldb.jar org.hsqldb.server.Server --database.0 file:book --dbname.0 bookdb
即在data目錄下創建數據文件,文件名為book,啟動服務的數據庫名為bookdb,如果需要修改監聽端口,可以使用--poot 9002,如果不修改端口,可以不用添加這個參數,默認端口為9001,啟動后的顯示如下
D:\hsqldb-2.4.0\hsqldb\bin>myBookServer.bat
D:\hsqldb-2.4.0\hsqldb\bin>cd ..\data
[Server@4517d9a3]: Startup sequence initiated from main() method
[Server@4517d9a3]: Could not load properties from file
[Server@4517d9a3]: Using cli/
default properties only
[Server@4517d9a3]: Initiating startup sequence

[Server@4517d9a3]: Server socket opened successfully in 6 ms.
[Server@4517d9a3]: Database [index=0, id=0, db=file:book, alias=bookdb] opened successfully in 354 ms.
[Server@4517d9a3]: Startup sequence completed in 362 ms.
[Server@4517d9a3]: 2017-04-23 15:22:33.599 HSQLDB server 2.4.0 is online on port 9001
[Server@4517d9a3]: To close normally, connect and execute SHUTDOWN SQL
[Server@4517d9a3]: From command line, use [Ctrl]+[C] to abort abruptly
看到這個提示,說明數據庫已經啟動好了,并開啟了監聽端口9001,現在可以通過客戶端程序連接了
在bin目錄下,有一個runManager.bat和一個runManagerSwing.bat,這兩個批處理都可以打開自帶的客戶端程序,只是界面風格有所不同,runManager要簡潔些,下面介紹一下runManagerSwing的使用,雙擊打開后,需要填寫連接信息,當然也可以在命令行里通過參數的方式進行連接,在彈出對話框里輸入連接信息

mybook是為當前配置取的名字,URL里添加上bookdb,如果不是9001端口的話,還需要添加端口,如//localhost:9001/bookdb,登錄后,就可以進入到管理界面了

在這里操作HSQLDB,比如創建表,修改數據之類的,如果需要修改密碼之類的操作,文檔里有詳解
創建表,插入數據,可以上圖界面中運行如下命令
CREATE TABLE TB_BOOKS(BOOKID INTEGER GENERATED BY DEFAULT AS IDENTITY NOT NULL PRIMARY KEY,BOOKNAME VARCHAR(30),AUTHOR VARCHAR(30));
創建一個book表,分別為bookid,bookname,author
JDBC訪問
接下來用JAVA寫入數據并測試
package com.zhouf.hsql;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class HsqlTest {
public static void main(String[] args) throws SQLException {
//initData();
Connection conn = getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from tb_books");
while(rs.next()){
System.out.println(rs.getString("bookname") + "=>" + rs.getString("author"));
}
rs.close();
stmt.close();
conn.close();
}
public static Connection getConnection(){
Connection conn = null;
try {
Class.forName("org.hsqldb.jdbcDriver");
conn = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/bookdb", "SA", "");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
public static void initData() throws SQLException{
Connection conn = getConnection();
Statement stmt = conn.createStatement();
for (int i = 10; i < 30; i++) {
String sql = "insert into tb_books(bookname,author) values('BookName"+i+"','Author"+i+"')";
System.out.println(sql);
stmt.addBatch(sql);
}
stmt.executeBatch();
stmt.close();
conn.close();
}
}
先調用initData()初始化數據,就可以在管理界面中看到數據了,再運行java可以讀取數據,JDBC連接沒有問題,記得一定要在工程里引用lib/hsqldb.jar庫
此時在data目錄下有很多book開頭的文件,只是后綴有所不同,有臨時文件,日志文件,屬性文件以及腳本文件等,如果運行了shutdown命令,則其他文件會自動清理,僅保留properties和script文件,如果要帶走數據庫,把這兩個文件帶走就好了。
如果不希望每次打開管理界面都彈出對話框要求輸入內容,可以在命令行里添加參數,拷貝一份bin/runManagerSwing.bat并修改為如下內容
cd ..\data
@java -classpath ..\lib\hsqldb.jar org.hsqldb.util.DatabaseManagerSwing --url jdbc:hsqldb:hsql://localhost/bookdb --user SA
另存為myBookManager.bat,下次直接運行這個批處理就可能直接連接到數據庫服務器,不用再彈出連接對話框了,前提是服務器正在運行中,如果運行了shutdown關閉了服務器,則需要重新啟動服務器進行連接。
至此,基本的hsqldb的使用就完成了,文檔里還有其它更多的配置和連接方式,詳細情況請參閱doc目錄下的文檔。
如果需要把hsqldb嵌入到webapp中運行,不用單獨啟動服務器,請關注后續文檔,稍后整理好再發布。自己碼了一下午才整理好這一篇,看來得提高效率了,如果這篇文檔能對大家所有幫助,那就太好了。