Hsqldb与项目集成

进行模式下集成

  可以集成进行(In-Process)模式下的hsqldb,由于数据存储在文件中,即使程序退出,数据也不会被销毁

  采用jdbc集成的方式

 package com.test.hsqldb;

 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 TestHsqldbFile { public static void main(String[] args) throws SQLException, ClassNotFoundException { // 加载HSQL DB的JDBC驱动
Class.forName("org.hsqldb.jdbc.JDBCDriver"); // 链接内存库,自动创建内存数据库,得到联接对象 connection
String url="jdbc:hsqldb:file:testdb/testdir";
Connection con=DriverManager.getConnection(url, "sa", ""); // 新建数据表
String ctreateTable="DROP TABLE test IF EXISTS; create table test(id integer,name VARCHAR(22) )";
Statement createStatement = con.createStatement();
long f1 = createStatement.executeUpdate(ctreateTable);
System.out.println("创建表:" + f1); // 插入数据
String insertSql = "INSERT INTO test VALUES(1,'小明')";
Statement insertStatement = con.createStatement();
long f2 = insertStatement.executeUpdate(insertSql);
System.out.println("插入数据:" + f2); // 查询数据
String selectSql = "select id,name from test";
PreparedStatement prepareStatement = con.prepareStatement(selectSql);
// 发送SQL 返回一个ResultSet
ResultSet rs=prepareStatement.executeQuery(); // 编历结果集
while(rs.next())//从数据库的取一行数据,是否还有下一行
{
int id=rs.getInt(1); //从1开始
String name=rs.getString(2);
System.out.println("id:"+id+"\t名称:"+name);
} // 关闭连接
con.close(); } }

集成到web项目中

  Hsqldb服务随着web项目的启动而启动,web项目的停止而停止

  1、编辑一个HsqlDB监听启动类,ServletContextListener.java

 package com.test.hsqldb.listener;

 import java.io.IOException;

 import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener; import org.hsqldb.persist.HsqlProperties;
import org.hsqldb.server.Server;
import org.hsqldb.server.ServerAcl.AclFormatException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; /**
* HsqlDB监听启动类
* @author H__D
* @date 2019-05-26 22:38:26
*
*/
public class HsqlDBListener implements ServletContextListener { private static final Logger log = LoggerFactory.getLogger(HsqlDBListener.class); private Server server = null; /**
* 当Servlet 容器启动Web 应用时调用该方法。在调用完该方法之后,容器再对Filter 初始化,
* 并且对那些在Web 应用启动时就需要被初始化的Servlet 进行初始化。
*/
@Override
public void contextInitialized(ServletContextEvent sce) { // 以服务模式运行hsqldb
// 新建一个hsqldb服务对象
server = new Server();
// 设置属性
// HsqlProperties p = new HsqlProperties(null);
// server.setProperties(p);
// 设置数据库名
server.setDatabaseName(0, "testdb");
// 设置数据库目录
server.setDatabasePath(0, sce.getServletContext().getRealPath("/") + "testdb/"+"testdir");
// 设置端口
server.setPort(9001);
//可以使用自定义编写器
server.setLogWriter(null);
//可以使用自定义编写器
server.setErrWriter(null);
// 启动
server.start(); log.info("Server Hsqldb Start ...");
} /**
* 当Servlet 容器终止Web 应用时调用该方法。在调用该方法之前,容器会先销毁所有的Servlet 和Filter 过滤器。
*/
@Override
public void contextDestroyed(ServletContextEvent sce) {
// TODO Auto-generated method stub
// 关闭
server.shutdownCatalogs(1); log.info("Server Hsqldb Stop ...");
} }

  2、在web.xml中注册监听器

 <listener>
<listener-class>com.test.hsqldb.listener.HsqlDBListener</listener-class>
</listener>

  3、启动web项目,就能使用jdbc连接hsqldb服务了

与Spring集成

  新建一个SpringMVC+Spring+Mybatis工程,参考:【Mybatis】MyBatis之整合Spring(八),本例在此工程基础上演示

  1、编辑HsqlDB监听启动类,并在web.xml项目中注册,如上。

  2、编辑注册数据源文件(spring-mybatis.xml),并加入初始化脚本配置

 <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://mybatis.org/schema/mybatis-spring
http://mybatis.org/schema/mybatis-spring.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://www.springframework.org/schema/jdbc
http://www.springframework.org/schema/jdbc/spring-jdbc-4.0.xsd"> <!-- 引入数据库的配置文件 -->
<context:property-placeholder
location="classpath:dbconfig.properties" /> <!-- 数据源:Spring用来控制业务逻辑。数据源、事务控制、aop -->
<bean id="dataSource"
class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="jdbcUrl" value="${jdbc.url}"></property>
<property name="driverClass" value="${jdbc.driver}"></property>
<property name="user" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean> <!-- 初始化脚本 -->
<jdbc:initialize-database data-source="dataSource">
<jdbc:script location="classpath:hsqldb-schema.sql" />
<jdbc:script location="classpath:hsqldb-dataload.sql" />
</jdbc:initialize-database> <!-- spring事务管理 -->
<bean id="dataSourceTransactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean> <!-- 开启基于注解的事务 -->
<tx:annotation-driven
transaction-manager="dataSourceTransactionManager" /> <!-- 整合mybatis 目的:1、spring管理所有组件。mapper的实现类。 service==>Dao @Autowired:自动注入mapper;
2、spring用来管理事务,spring声明式事务 -->
<!--创建出SqlSessionFactory对象 -->
<bean id="sqlSessionFactoryBean"
class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<!-- configLocation指定全局配置文件的位置 -->
<property name="configLocation"
value="classpath:mybatis-config.xml"></property>
<!--mapperLocations: 指定mapper文件的位置 -->
<property name="mapperLocations"
value="classpath:mybatis/mapper/*.xml"></property>
</bean> <!--配置一个可以进行批量执行的sqlSession -->
<bean id="sqlSession"
class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg name="sqlSessionFactory"
ref="sqlSessionFactoryBean"></constructor-arg>
<constructor-arg name="executorType" value="BATCH"></constructor-arg>
</bean> <!-- 扫描所有的mapper接口的实现,让这些mapper能够自动注入; base-package:指定mapper接口的包名 -->
<mybatis-spring:scan
base-package="com.test.hsqldb.dao" /> </beans>

  3、编辑初始化数据库脚本:hsqldb-schema.sql

 DROP TABLE Employee IF EXISTS;
CREATE TABLE Employee (
id INT NOT NULL PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY ( START WITH 1, INCREMENT BY 1 ),
last_name VARCHAR ( 255 ) DEFAULT NULL,
gender VARCHAR ( 255 ) DEFAULT NULL,
email VARCHAR ( 255 ) DEFAULT NULL
);

  4、编辑初始化数据脚本:hsqldb-dataload.sql

 INSERT INTO employee VALUES (1, '小白', '', 'dabai@163.com');
INSERT INTO employee VALUES (2, '小明', '', 'xiaoming@163.com');
INSERT INTO employee VALUES (3, '小红', '', 'xiaohong@163.com');

  5、数据库配置信息,dbconfig.properties

 jdbc.driver = org.hsqldb.jdbc.JDBCDriver
jdbc.url = jdbc:hsqldb:hsql://localhost:9001/testdb
jdbc.username = sa
jdbc.password =

  6、运行结果如下:

  

 

【DataBase】Hsqldb与项目集成的更多相关文章

  1. 【DataBase】H2 DateBase与项目集成

    本例介绍H2与web项目的集成 项目启动H2数据库 1.新建Maven Web项目,参考:[Maven]Eclipse 使用Maven创建Java Web项目 2.引入h2的jar包依赖 <de ...

  2. Taurus.MVC 微服务框架 入门开发教程:项目集成:5、统一的日志管理。

    系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...

  3. 现有iOS项目集成React Native过程记录

    在<Mac系统下React Native环境搭建>配置了RN的开发环境,然后,本文记录在现有iOS项目集成React Native的过程,官方推荐使用Cocoapods,项目一开始也是使用 ...

  4. Vuejs实例-02Vue.js项目集成ElementUI

    Vuejs实例-02Vue.js项目集成ElementUI 0:前言 vue.js的UI组件库,在git上有多个项目,我见的使用者比较多的是iView和Element.两个组件库,组件都很丰富. 官网 ...

  5. 项目集成自动分词系统ansj,实现自定义词库

    一,分词系统地址:https://github.com/NLPchina/ansj_seg 二,为什么选择ansj? 1.项目需求: 我们平台要做手机售后的舆情分析,即对购买手机的用户的评论进行分析. ...

  6. Vue.js项目集成ElementUI

    Vuejs实例-02Vue.js项目集成ElementUI   Vuejs实例-02Vue.js项目集成ElementUI 0:前言 vue.js的UI组件库,在git上有多个项目,我见的使用者比较多 ...

  7. 开源一款强大的文件服务组件(QJ_FileCenter)(系列三 访问接口与项目集成)

    系列文章 1. 开源一款强大的文件服务组件(QJ_FileCenter)(系列一) 2. 开源一款强大的文件服务组件(QJ_FileCenter)(系列二 安装说明) 3. 开源一款强大的文件服务组件 ...

  8. iOS-Cordova集成开发,已有项目集成cordova

    iOS-Cordova集成开发,已有项目集成cordova 项目组准备开发一个APP,要求Android和iOS端页面完全一致,除了一个页面跟业务相关的不同,其他界面基本一致,因此,萌生一个想法,关于 ...

  9. VS2017不能生成Database Unit Test项目

    问题描述: VS2017生成Database Unit Test项目时,报出如下错误,但该项目在VS2015中能正常生成: 主要是因为下面两个程序集找不到引用: Microsoft.Data.Tool ...

随机推荐

  1. test20190729 夏令营NOIP训练14

    40+100+0=140. 基因光线 黑大帅统治古古怪界后,一直在玩一种很奇葩的游戏.在一个二维平面上,他先复制了n个小A,把他们放在不同的位置,然后射出一条ax+by+c=0的基因光线,宽度为d,即 ...

  2. java 获取某年某月最后一天

    Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.YEAR, 2016); calendar.set(Calendar ...

  3. SSMS开发利器Sql Prompt

    一.前言 一个Sql Server 开发智能提示插件,方便查询表结果,避免了开发人员一个个敲查询语句.执行语句等,一起来看看吧. SQL Prompt 9.5 支持SSMS18 下载地址: 链接:ht ...

  4. C语言实验1—— C中的指针和结构体

    问题 实现一个算法,检测单链表中是否有环,如果有环还要得到环的入口. 分析 判断是否有环:快慢指针法(也叫“龟兔赛跑”),慢指针每次移动一位,快指针每次移动两位,如果有环,他们一定会相遇. 求环的入口 ...

  5. 学习Spring-Data-Jpa(五)---可嵌入对象和元素集合的使用

    1.场景一:地址信息(省.市.县.详细地址)在很多实体中都需要,比如说作者有地址,订单也有地址,但是他们的地址并不能独立与他们存在,所以地址不能映射为实体,那么我们就需要在作者实体和订单实体中都添加这 ...

  6. 在golang中使用json

    jsoniter高性能json库 非常快,支持java和go marshal使用的一些坑 package main import ( "encoding/json" "f ...

  7. 洛谷 P2401 不等数列 题解

    每日一题 day25 打卡 Analysis dp[i][j]=dp[i-1][j-1]*(i-j)+dp[i-1][j]*(j+1); 其中i和j是表示前i个数中有j个小于号,j<=i-1 要 ...

  8. 结构化异常SEH处理机制详细介绍(一)

    结构化异常处理(SEH)是Windows操作系统提供的强大异常处理功能.而Visual C++中的__try{}/__finally{}和__try{}/__except{}结构本质上是对Window ...

  9. $\text{fhq-treap}$总结

    \(\text{fhq-treap}\)总结 又名范浩强\(\text{treap}\),是一种无旋\(\text{treap}\).其原理同\(\text{treap}\)一样都是通过维护一个随机堆 ...

  10. lixuxmint系统定制与配置(4)-应用安装

    小书匠Linux 先简单列一下,其实每个软件都有自己的个性化配置,以后有时间了,逐个记录下来.编程主力环境是Python,编辑器使用Jupyter,这个编辑器是在远程服务器启动,映射端口到本地来编辑. ...