内存数据库 HSQLDB

应用

    在JUnit单元测试中,由于,很多时候没有真实数据库环境,所以,我们很自然的会借助内存数据库HSQLDB。内存数据库非常轻量级,当内存数据库关闭后,内存中的数据也随之消失。代码虽然简单,但还是贴出来,呵呵,供以后复制粘贴方便。

jdbcDriver in pom.xml of Maven:

		<dependency>
			<groupId>org.hsqldb</groupId>
			<artifactId>hsqldb</artifactId>
			<version>2.3.2</version>
		</dependency>
package shuai.study.memorydb;

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

public class MemoryDB {
	private static Connection connection = null;
	private static Statement statement = null;
	private static PreparedStatement preparedStatement = null;
	private static ResultSet resultSet = null;

	// Load jdbcDriver
	static {
		try {
			Class.forName("org.hsqldb.jdbcDriver");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}

	// Get DB connection
	public static Connection getConnection() {
		if (connection == null) {
			try {
				connection = DriverManager.getConnection("jdbc:hsqldb:mem:mdb", "shuai", "123");
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}

		return connection;
	}

	// Get DB statement
	public static Statement getStatement() {
		if (connection == null) {
			getConnection();
		}

		if (statement == null) {
			try {
				statement = connection.createStatement();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}

		return statement;
	}

	// Execute SQL
	public static void executeSQL(String sql) {
		if (statement == null) {
			getStatement();
		}

		try {
			statement.executeUpdate(sql);
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	// Get resultSet
	public static ResultSet executeQuerySQL(String sql) {
		if (connection == null) {
			getConnection();
		}

		try {
			preparedStatement = connection.prepareStatement(sql);
			resultSet = preparedStatement.executeQuery();
		} catch (SQLException e) {
			e.printStackTrace();
		}

		return resultSet;
	}

	// Print resultSet
	public static void resultPrint(ResultSet resultSet) {
		try {
			int columnCount = resultSet.getMetaData().getColumnCount();
			String columnValue = null;

			while (resultSet.next()) {
				for (int n = 1; n <= columnCount; n++) {
					columnValue = resultSet.getString(n);

					if (n == columnCount) {
						System.out.println(columnValue);
					} else {
						System.out.print(columnValue + "\t");
					}

				}
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	// Close DB
	public static void closeDB() {
		try {
			if (resultSet != null) {
				resultSet.close();
			}

			if (preparedStatement != null) {
				preparedStatement.close();
			}

			if (statement != null) {
				statement.close();
			}

			if (connection != null) {
				connection.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		MemoryDB.executeSQL("CREATE TABLE EMPLOYEE(ID INTEGER, NAME VARCHAR(20), SEX VARCHAR(10), TEAM VARCHAR(20))");

		MemoryDB.executeSQL("INSERT INTO EMPLOYEE VALUES(1,'shuai', 'male', 'FMC')");
		MemoryDB.executeSQL("INSERT INTO EMPLOYEE VALUES(2,'hellen', 'female', 'MUS')");
		MemoryDB.executeSQL("INSERT INTO EMPLOYEE VALUES(3,'mery', 'female', 'SDM')");

		MemoryDB.executeSQL("COMMIT");

		ResultSet resultSet = MemoryDB.executeQuerySQL("SELECT * FROM EMPLOYEE");
		MemoryDB.resultPrint(resultSet);

		MemoryDB.closeDB();
	}
}
时间: 2024-10-25 10:21:27

内存数据库 HSQLDB的相关文章

在SCA Module中使用iBATIS框架实现数据持久层

在完成 SCA Module 建模后用 Java 对象进行实现时,采用 Hibernate 和采用 iBATIS 实现 SCA Module 的数据持久层,目的都是为 SDO 提供数据访问服务并加快 SCA 模块实现.前文已经讲过关于如何使用 Hibernate 实现 SCA Module 的数据持久层,本文将介绍 iBATIS 框架,比较 iBATIS 和 Hibernate 的异同,并以实例的方式介绍如何使用 iBATIS 实现 SCA Module 的数据持久层. iBATIS 是一种数据

Java学习:HSQLDB文档(一)

近来研究HSQLDB,就尝试翻译了一下它的文档,这里贴出来和大家共享,欢迎大家和我交流:wwccff@163.net 一 什么是HSQLDB? HSQLDB具有以下特点: 是一个开放源代码的JAVA数据库 具有标准的SQL语法和JAVA接口 HSQLDB可以自由使用和分发 非常简洁和快速的 具有内存数据库,独立数据库和C/S数据库三种方式 可是在APPLET中使用 更多的细节: 索引可以被创建和自动使用 支持事务处理 允许表关联 完整性引用和约束 支持JAVA存储过程和函数 数据库可以生成SQL

使用hsqldb将常用数据库整合到应用程序中

程序|数据|数据库 使用hsqldb将常用数据库整合到应用程序中 在 http://blog.csdn.net/lizongbo/archive/2005/02/13/286697.aspx 提到过一些常用数据库,可以视作固定编码的数据库.对于这些书库,通常只进行查询使用. 因此针对一些比如用户希望只传入ip地址就要查询到用户信息,或者只传入行政区划编号,就可以得到行政区划名字等等需求.而且用户不希望去配置数据库信息等等,Access文件虽然比较方便,却不具有跨平台的效果,因此可以借助开源免费的

使用SQL Server 2014内存数据库时需要注意的问题

本文从产品设计和架构角度分享了Microsoft内存数据库方面的使用经验,希望你在阅读本文之后能够了解这些新的对象.概念,从而更好地设计你的架构. 内存数据库,指的是将数据库的数据放在内存中直接操作.相对于存放在磁盘上,内存的数据读写速度要高出很多,故可以提高应用的性能.微软的SQL Server 2014已于2014年4月1日正式发布,SQL 2014一个主要的功能即为内存数据库. 下面,我将着重介绍使用SQL Server 2014内存数据库时需要注意的地方. 关于内存数据库 SQL Ser

内存数据库

        内存数据库,顾名思义就是将数据放在内存中直接操作的数据库.相对于磁盘,内存的数据读写速度要高出几个数量级,将数据保存在内存中相比从磁盘上访问能够极大地提高应用的性能.同时,内存数据库抛弃了磁盘数据管理的传统方式,基于全部数据都在内存中重新设计了体系结构,并且在数据缓存.快速算法.并行操作方面也进行了相应的改进,所以数据处理速度比传统数据库的数据处理速度要快很多,一般都在10倍以上.内存数据库的最大特点是其"主拷贝"或"工作版本"常驻内存,即活动事务只

使用HSQLDB数据库的一些问题求教

问题描述 我新做的WEB项目使用了HSQLDB数据库,以前没用过这个数据库,过程中一些问题请各路大侠点点:1.一个是我用BAT启动数据库图形管理工具时,在启动记录上显示Failedtoloadpreferences,同时在登录窗口上总是显示的TYPE为MEMORY,不知有没有办法能改默认值改为SERVER,因为我是用的SERVER模式.2.我写了一个listener在WEB启动时启动数据库,使用的SERVER方式,项目启动后我使用图形工具连接总提示socket错误.SERVER方式不是能够连接多

大数据市场迎来扩容期 本土内存数据库抢位崛起

日前,中国人民大学大数据统计实验室最新发布的研究认为,2016年国内大数据预计将突破1000亿元市场规模,未来四年将呈爆发性增长,2020大数据市场规模有望突破8000亿元,本土内存数据库将进入新蓝海时代. 国际标准组织大数据专家.柏睿数据科技公司董事长兼CTO刘睿民认为,中国的数据库行业将迎来颠覆性变革,由中国自主研发的核心技术软件也将迎来更多的话语权.2016年我国的内存数据库有望改写由甲骨文雄霸数据库市场的历史,中国的内存数据库市场正迎来新的拐点. 内存数据新蓝海扑面而来 "作为国内内存数

可重用的 Hsqldb 启动、停止之 Ant 任务脚手架

可重用的 Hsqldb 启动.停止之 Ant 任务脚手架   立正... 稍息 讲一下 坐下...   在Eclipse里用Ant来启动Hsqldb       <!-- Start the Hsqldb database server -->       <targetname="dbstart"description="Start the Hsqldb database server">             <javaclass

SQL Server 内存数据库原理解析

原文:SQL Server 内存数据库原理解析 前言 关系型数据库发展至今,细节上以做足文章,在寻求自身突破发展的过程中,内存与分布式数据库是当下最流行的主题,这与性能及扩展性在大数据时代的需求交相辉映.SQL Server作为传统的数据库也在最新发布版本SQL Server 2014中提供了新利器 SQL Server In-Memory OLTP(Hekaton),使得其在OLTP系统中的性能有了几十倍甚至上百倍的性能提升,本篇文章为大家探究一二.         大数据时代的数据如何组织应