`
maimode
  • 浏览: 412571 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

hsqldb常识

阅读更多

HSQLDB一大特色就是能够在内存中建立数据库,当然它也能将这些内存数据库保存到文件中以便实现真正的持久化。

 

先睹为快!

 

下面是一个In-Process方式访问内存数据库的代码示例:

 

下面代码需要引入hsqldb.jar包 (hsqldb-2.2.8)

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;

public class Main {

	public static void main(String[] args) {
		try {
			//加载HSQLDB的JDBC驱动
			Class.forName("org.hsqldb.jdbcDriver");
			//在内存中建立数据库memdb,用户名为sa,密码为空
			Connection conn = DriverManager.getConnection("jdbc:hsqldb:mem:memdb","username","password");
			System.out.println("connect to memdb OK");
			
			Statement stat = conn.createStatement();
			//新建数据表
			stat.executeUpdate("create table person(NAME VARCHAR(20), AGE INTEGER)");
			System.out.println("create TABLE:person OK");
			
			//插入数据
			stat.executeUpdate("INSERT INTO person VALUES('张三丰',22)");
			stat.executeUpdate("INSERT INTO person VALUES('amos','25')");
			System.out.println("insert data into TABLE:person OK!");

			conn.close();
			
//			stat.execute("SHUTDOWN");
//			System.out.println("SHUTDOWN");
			
			Connection conn2 = DriverManager.getConnection("jdbc:hsqldb:mem:memdb","username","password");
			
			//查询数据
			PreparedStatement pstmt = conn2.prepareStatement("SELECT * FROM person");
			ResultSet rs = pstmt.executeQuery();
			while(rs.next()) {
				String s = null;
				s = rs.getString(1) + "," + rs.getString(2);
				System.out.println(s);
			}
			System.out.println("select data OK");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
 

 

 

The HSQLDB jar package is located in the /lib directory of the ZIP package and contains several components and programs.

 

• HyperSQL RDBMS Engine (HSQLDB)

• HyperSQL JDBC Driver

• Database Manager (GUI database access tool, with Swing and AWT versions)

• Sql Tool (command line database access tool)

 

Running Database Access Tools

 

java -cp ../lib/hsqldb.jar org.hsqldb.util.DatabaseManagerSwing

 

 

When a tool is up and running, you can connect to a database (may be a new database) and use SQL commands to access and modify the data.

 

 

A HyperSQL Database

 

Types of catalog data

• mem: stored entirely in RAM - without any persistence beyond the JVM process's life

• file: stored in filesystem files

• res: stored in a Java resource, such as a Jar and always read-only

 

 

 

 

In-Process Access to Database Catalogs

file:

 

Connection c = DriverManager.getConnection("jdbc:hsqldb:file:testdb", "SA", "");

 或者

 

Connection c = DriverManager.getConnection("jdbc:hsqldb:file:/opt/db/testdb", "SA", "");
 

mem:

 

Connection c = DriverManager.getConnection("jdbc:hsqldb:mem:mymemdb", "SA", "");

 res:

 

Connection c = DriverManager.getConnection("jdbc:hsqldb:res:org.my.path.resdb", "SA", "");
 

 

The first time in-process connection is made to a database, some general data structures are initialised and a few helper threads are started. After this, creation of connections and calls to JDBC methods of the connections execute as if they are part of the Java application that is making the calls. When the SQL command "SHUTDOWN" is executed, the global structures and helper threads for the database are destroyed.

 

 

Note that only one Java process at a time can make in-process connections to a given file: database. However, if the file: database has been made read-only, or if connections are made to a res: database, then it is possible to make inprocess connections from multiple Java processes.

 

HyperSQL HSQL Server

 

java -cp ../lib/hsqldb.jar org.hsqldb.server.Server --database.0 file:mydb --dbname.0 xdb
 

HyperSQL HTTP Server

 

This method of access is used when the computer hosting the database server is restricted to the HTTP protocol. The only reason for using this method of access is restrictions imposed by firewalls on the client or server machines and it should not be used where there are no such restrictions. The HyperSQL HTTP Server is a special web server that allows JDBC clients to connect via HTTP. The server can also act as a small general-purpose web server for static pages.

 

 

org.hsqldb.server.WebServer
 

HyperSQL HTTP Servlet

 

The Servlet class, in the HSQLDB jar, should be installed on the application server to provide the

connection. The database is specified using an application server property. Refer to the source file src/org/hsqldb/server/Servlet.java to see the details.

 

 

Both HTTP Server and Servlet modes can only be accessed using the JDBC driver at the client end. They do not provide a web front end to the database. The Servlet mode can serve only a single database.

 

Connecting to a Database Server

 

A common example is connection to the default port (9001) used for the hsql: protocol on the same machine:

 

try {
Class.forName("org.hsqldb.jdbc.JDBCDriver" );
} catch (Exception e) {
System.err.println("ERROR: failed to load HSQLDB JDBC driver.");
e.printStackTrace();
return;
}
Connection c = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/xdb", "SA", "");

 

 If the HyperSQL HTTP server is used, the protocol is http: and the URL will be different:

 

Connection c = DriverManager.getConnection("jdbc:hsqldb:http://localhost/xdb", "SA", "");

 

Security Considerations

the password for the default system user should be changed from the default empty string 

 

 

HyperSQL provides two optional security mechanisms. The encrypted SSL protocol , and Access Control Lists .

Both mechanisms can be specified when running the Server or WebServer. On the client, the URL to connect to an SSL server is slightly different:

 

Java code to connect to the local secure SSL hsql and http Servers

 

Connection c = DriverManager.getConnection("jdbc:hsqldb:hsqls://localhost/xdb", "SA", "");
Connection c = DriverManager.getConnection("jdbc:hsqldb:https://localhost/xdb", "SA", "");

 

Accessing the Data

 

A connection should be reused as much as possible and closed only when it is not going to be used again for a long while.

 

A java.sql.DatabaseMetaData object is used to get metadata for the database.

 

 

A java.sql.CallableStatement object is used to execute an SQL CALL statement. The SQL CALL statement may contain parameters, which should be set to new values before each reuse.

 

A java.sql.Connection object also has some methods for transaction control.

 

Closing the Database

All databases running in different modes can be closed with the SHUTDOWN command, issued as an SQL statement.

 

 

A special form of closing the database is via the SHUTDOWN COMPACT command. This command rewrites the .data file that contains the information stored in CACHED tables and compacts it to its minimum size. This command should be issued periodically, especially when lots of inserts, updates or deletes have been performed on the cached tables. Changes to the structure of the database, such as dropping or modifying populated CACHED tables or indexes also create large amounts of unused file space that can be reclaimed using this command.

 

 

Databases are not closed when the last connection to the database is explicitly closed via JDBC. A connection property, shutdown=true, can be specified on the first connection to the database (the connection that opens the database) to force a shutdown when the last connection closes.

 

 

specifying a connection property to shutdown the database when the lastconnection is closed

 

Connection c = DriverManager.getConnection(
"jdbc:hsqldb:file:/opt/db/testdb;shutdown=true", "SA", "");
 

Creating a New Database

 

When a server instance is started, or when a connection is made to an in-process database, a new, empty database is created if no database exists at the given path.

If no username or password is specified, the default SA user and an empty password are used.

 

specifying a connection property to disallow creating a new database

 

Connection c = DriverManager.getConnection(
"jdbc:hsqldb:file:/opt/db/testdb;ifexists=true", "SA", "");
 

Creating and Accessing an Encrypted Database

 

First, a key must be created for the desired cipher and configuration. This is done by calling the function CRYPT_KEY(<cipher spec>, <provider>). If the default provider (the built-in JVM ciphers) is used, then NULL should be specified as the provider. The CRYPT_KEY function returns a hexadecimal key. The function call can be made in any HyperSQL database, so long as the provider class is on the classpath. This key can be used to create a new encrypted database. Calls to this function always return different keys, based on a generated random values.

 

As an example, a call to CRYPT_KEY('Blowfish', null) returned the string, '604a6105889da65326bf35790a923932'.

 

To create a new database, the URL below is used:

 

jdbc:hsqldb:file:<database
path>;crypt_key=604a6105889da65326bf35790a923932;crypt_type=blowfish
 

The third property name is crypt_provider. This is specified only when the provider is not the default provider.


 

HyperSQL works with any symmetric cipher that may be available from the JVM.

The files that are encrypted include the .script, .data, .backup and .log files. The .lobs file is not encrypted by default.

The property crypt_lobs=true must be specified to encrypt the .lobs file.

1
1
分享到:
评论
1 楼 mekingshow 2012-08-14  

相关推荐

    hsqldb使用(转载)

    hsqldb确实是个好东西,对于系统演示,开发等都很方便。

    hsqldb jdbc driver

    hsqldb jdbc driver适合于hsqldb

    HSQLDB中文帮助文档

    Hsqldb 是一个优秀的轻量级开源的纯Java SQL 数据库。 大家可以从Hsqldb 官方网站(http://hsqldb.org)获取到Hsqldb 的发布包、源代码和文档。

    hsqldb实例源代码

    简单的创建两个例子,如何创建hsqldb,如何使用hsqldb查询数据等。

    HSQLDB 1.8.0

    HSQLDB 1.8.0

    hsqldb-1.7.1.jar

    数据库连接 hsqldb1.7.1.jar

    hsqldb-2.3.2.zip

    hsqldb 2 3 2 zip HyperSQL是用Java编写的一款SQL关系数据库引擎 它的核心完全是多线程的 支持双向锁和MVCC 多版本并发控制 几乎完整支持ANSI 92 SQL 支持常见数据类型 最新版本增加了对BLOB和CLOB数据的支持 最高...

    hsqldb-lib.zip

    hsqldb可能需要的额外jar包 Additional Jar files needed for hsqldb.

    hsqldb-2.4.0.zip

    hsqldb-2.4.0

    hsqldb的最新版本

    hsqldb的最新1.9.0版本,支持windows操作系统

    hsqldb 2.25

    hsqldb for jdk1.5因为hsqldb的2.0版本以上都是jdk1.6进行编译的,我提供的这个2.25版本的是jdk1.5编译的。

    HSQLDB中文手册

    HSQLDB中文手册

    HSQLDB快速连接数据库

    HSQLDB中文文档,能够提高数据的处理速度。

    hsqldb jar

    hsqldb jar

    hsqldb-2.2.8数据库

    Hsqldb是一个开放源代码的JAVA数据库,其具有标准的SQL语法和JAVA接口,它可以自由使用和分发,非常简洁和快速。

    HSQLDB用户手册

    HyperSQL User Guide HyperSQL Database Engine (HSQLDB) 2.2 hsqldb-2.2.9用户手册

    hsqldb-2.5.0.jar

    hsqldb数据库下载,很好用,简易的内存数据库,特别适合初学者。

    HSQLDB数据库

    HSQLDB数据库,经典啊

    hsqldb-2.5.0.zip

    开源数据库hsqldb最新版本2.5.0,含源代码及bin文件 Open-sourced database hsqldb2.5.0, including source code and bin file(stuctured in form of .BAT)

    hsqldb.jar

    hsqldb.jar

Global site tag (gtag.js) - Google Analytics