采用C/S的模式操作HSQL数据库:
1、建立数据库的目录:
e:\hsqldb 目录下建立mydb.properties 和mydb.script文件,如果目录下不建立数据库文件则会自动产生这些文件;如果需要在建立库的同时就让数据库
的对象(表等)建立好,则需要在mydb.script中写入这些执行的脚本语句,数据库启动时会读取脚本文件并执行这些脚本语句;
2、使用命令行的方式启动后台HSQL数据库:
java -ms512M -mx1024M -cp hsqldb.jar org.hsqldb.Server -database.0 e:\hsqldb\mydb -dbname.0 mydb -port 9002
这样将以mydb作为数据库名启动数据库;端口为9002;
3、启动查看管理工具:
java -cp hsqldb.jar org.hsqldb.util.DatabaseManager
启动后进入管理界面:选择HSQL Dabase Engine Server以客户端服务器方式进行连接;
org.hsqldb.jdbcDriver
jdbc:hsqldb:hsql://localhost:9002/mydb 这里要指定后台数据库监听的端口和数据库名;
其他使用自动的值连接即可,这时可以进入到库的管理界面执行各种SQL语句;
4、启动客户端程序
java -cp D:\hsql173\hsqldb\lib\hsqldb.jar;. com.guo.TestDB 启动测试的例子程序;
源程序:参照hsql的demo
package com.guo;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
/**
* Title: Testdb Description: simple hello world db example of a standalone
* persistent db application * every time it runs it adds four more rows to
* sample_table it does a query and prints the results to standard out * Author:
* Karl Meissner karl@meissnersd.com
*/
public class TestDB {
Connection conn;
// we dont want this garbage collected until we are done
public TestDB(String db_file_name_prefix) throws Exception {
Class.forName("org.hsqldb.jdbcDriver");
conn = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost:9002/" + db_file_name_prefix, "sa", "");
}
public void shutdown() throws SQLException {
conn.close();
}
// use for SQL command SELECT
public synchronized void query(String expression) throws SQLException {
Statement st = null;
ResultSet rs = null;
st = conn.createStatement();
rs = st.executeQuery(expression); // run the query
dump(rs);
st.close();
}
// use for SQL commands CREATE, DROP, INSERT and UPDATE
public synchronized void update(String expression) throws SQLException {
Statement st = null;
st = conn.createStatement(); // statements
int i = st.executeUpdate(expression); // run the query
if (i == -1) {
System.out.println("db error : " + expression);
}
st.close();
conn.commit();
}
//采用批量方式
public synchronized void updateBatch() throws SQLException {
PreparedStatement st = null;
st = conn.prepareStatement("insert into sample_table values(?,?)");
int commitnum = 0;
for (int i = 0; i < 100000; i++) {
st.setString(1, "Ford");
st.setInt(2, 100);
st.addBatch();
st.setString(1, "Toyota");
st.setInt(2, 200);
st.addBatch();
st.setString(1, "Honda");
st.setInt(2, 300);
st.addBatch();
st.setString(1, "GM");
st.setInt(2, 400);
st.addBatch();
commitnum = commitnum+1;
if(commitnum>5000){
commitnum=0;
st.executeBatch();
conn.commit();
}
}
st.close();
conn.commit();
}
public static void dump(ResultSet rs) throws SQLException {
ResultSetMetaData meta = rs.getMetaData();
int colmax = meta.getColumnCount();
int i;
Object o = null;
for (; rs.next();) {
for (i = 0; i < colmax; ++i) {
o = rs.getObject(i + 1);
System.out.print(o.toString() + " ");
}
System.out.println(" ");
}
}
public static void main(String[] args) {
TestDB db = null;
try {
db = new TestDB("mydb");
} catch (Exception ex1) {
ex1.printStackTrace(); // could not start db
return; // bye bye
}
try {
db.update("DROP TABLE sample_table");
db.update("CREATE TABLE sample_table(str_col VARCHAR(256),num_col INTEGER)");
} catch (SQLException ex2) {
ex2.printStackTrace();
}
try {
System.out.println (new java.util.Date());
for (int i = 0; i < 100000; i++) {
db.update("INSERT INTO sample_table(str_col,num_col) VALUES('Ford', 100)");
db.update("INSERT INTO sample_table(str_col,num_col) VALUES('Toyota', 200)");
db.update("INSERT INTO sample_table(str_col,num_col) VALUES('Honda', 300)");
db.update("INSERT INTO sample_table(str_col,num_col) VALUES('GM', 400)");
}
System.out.println (new java.util.Date());
// do a query
//db.query("SELECT * FROM sample_table WHERE num_col < 250");
// at end of program
db.shutdown();
} catch (SQLException ex3) {
ex3.printStackTrace();
}
} // main()
} // class Testdb
5、执行结果分析;
采用单条写入方式HSQL用时:
Wed Jul 04 14:29:39 CST 2007
Wed Jul 04 14:31:01 CST 2007
这里的测试程序执行了40万条数据的写入,用时2分30妙(可以和直接ORACLE的进行对比)
采用同样的方式使用ORACLE的连接
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.5.77:1521:TQS_DEV", "wad", "wad");
执行时间没有结果6000条就2分多钟了(被迫中途停止)
采用批量的写入方式HSQL用了几秒钟:
Wed Jul 04 16:21:32 CST 2007
Wed Jul 04 16:21:38 CST 2007
采用ORACLE的批量写入方式同样很快:
Wed Jul 04 16:24:56 CST 2007
Wed Jul 04 16:24:58 CST 2007
如果也是可以采用批量方式的话根本就没有必要在用内存数据库了;
每次业务运行后都有日志文件和SCRIPT文件,当数据库启动时自动将原有的数据导入非常的快,可以进行统计查询处理;
分享到:
相关推荐
在Java单元测试中,HSQL Database常用于模拟真实的数据库环境,提供快速且可重复的测试数据。例如,使用JUnit和Hibernate等框架,可以在测试前初始化数据库状态,测试后清理数据。 总结,HSQL Database是一款强大的...
HSQL因其小巧、快速和易于使用而受到开发者们的青睐,尤其适用于开发测试环境和小型应用。 “hsql可视化工具”指的是用于与HSQL数据库交互的图形用户界面工具。这种工具通常包含以下功能: 1. **连接管理**:允许...
HSQL(HyperSQL)是一种轻量级、高性能的关系型数据库管理系统,常用于开发测试环境或者嵌入式应用。本文将详细介绍HSQL的安装、部署以及使用过程,帮助您顺利搭建并操作HSQL数据库。 ### 一、下载与解压 首先,...
### Pentaho HSQL连接教程 #### 一、前言 Pentaho BI Suite是一款非常强大的商业智能工具,它集成了数据集成、报表设计、仪表板展示等多种功能。本教程将详细介绍如何在Pentaho BI Suite中连接到HSQLDB(HyperSQL ...
《深入理解HSQL源代码与Eclipse环境搭建》 HSQLDB,全称为HyperSQL Database,是一款开源的关系型数据库管理系统,特别适用于Java应用程序。它的源代码开放,使得开发者能够深入理解其内部工作原理,进行定制化开发...
在单元测试中,HSQL的内存模式特别有用,因为数据库会在测试开始时清空,并在测试结束后自动关闭,确保了测试的隔离性和可重复性。使用Spring的TestContext框架,可以方便地在测试类中配置和初始化HSQL数据库。 总...
此外,HSQL还支持事务处理,索引创建,视图,触发器等高级特性,这使得它成为一个功能齐全的数据库系统,非常适合用于测试和原型设计。 总结来说,HSQL处理文本数据库的能力使其成为开发人员的有力工具。通过理解...
单元测试的时候,启动HSQLDB的file模式,数据不存盘,可以保证测试原子性。 3. 来回复制,随身携带。 4. 不需要安装,使用非常方便。 5. 稳定,而且支持的数据量足够大。 6. 小型项目作为现场数据库...
HSQL数据库则是一个轻量级、高性能的开源关系型数据库,常用于测试和快速原型开发。 首先,我们需要理解Spring如何配置数据源。在Spring应用中,数据源是连接到数据库的关键组件。通常,我们可以通过XML配置或Java...
HSQldb适用于各种应用场景,从小型嵌入式系统到大型服务器端应用,甚至作为测试环境中的数据库。 ### SQL语法支持 HSQldb 支持SQL:2003标准,包括完整的DML(数据操作语言)和DDL(数据定义语言)语句。用户可以...
5. Hsql:Hsql是一个轻量级的关系型数据库管理系统,常用于开发和测试环境中。它可以运行在内存中,也可以持久化到磁盘。由于其小巧、快速和易于使用的特点,它常常被用来作为Java应用的测试数据库。 6. Jetty:...
1. 内存模式:HSQLDB能在内存中创建数据库,这使得它非常适合用于快速原型开发和测试环境,无需进行繁琐的磁盘I/O操作,数据处理速度极快。 2. 单机模式:在单机模式下,HSQLDB可以作为单用户或多个用户同时访问的...
标题中的“HSQL JDBC操作”指的是使用Java的JDBC(Java Database Connectivity)接口与HSQLDB(HyperSQL数据库)进行交互。HSQLDB是一个轻量级、开源的关系型数据库管理系统,广泛用于测试和开发环境中,因为它启动...
HSQL数据库,全称为HyperSQL Database,是一款轻量级、高性能、完全开源的Java数据库管理系统。它被设计为一个嵌入式数据库,适用于各种应用程序,同时也支持客户端/服务器模式,可以作为独立的数据库服务器使用。...
本话题聚焦于将HSQL数据库的数据迁移到MySQL的过程,这是一个常见的需求,特别是在开发、测试和生产环境之间进行数据同步时。以下是对这一过程的详细说明: 1. **HSQL数据库**:HSQLDB(HyperSQL Database)是一款...
### Jira从HSQL迁移到MYSQL的方法 在IT项目管理和软件开发领域中,Jira作为一款广泛使用的工具,其数据库迁移是一项重要的维护任务。本文将详细介绍如何从HSQL(HyperSQL Database Engine)迁移到MySQL的过程,确保...