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. test20190504 行走

    行走(walk.cpp/c/pas) 题目描述 "我有个愿望,我希望走到你身边." 这是个奇异的世界,世界上的 n-1 条路联结起来形成一棵树,每条路有一个对应的权值 ci. 现在 ...

  2. 评估预测函数(2)---对hypothesis进行评估

    当有多个features时,无法通过图像来评估hypothesis 当我们的hypothesis只有一个features时,可以通过观察它的图像来看它是否overfitting,但是如果我们有多个fe ...

  3. 入门node.js

    我们现在要做一个简单的h5应用:包含登录.注册.修改密码.个人中心主页面.个人中心内页修改名称.个人中心修改手机号码. 第一步:工具安装,我选择了能够辅助我们快速开发的light开发工具 1. lig ...

  4. YAML_12 批量创建用户,分别设置用户组

    with_items标准循环 ansible]# vim add.yml --- - hosts: web2   remote_user: root   tasks:     - user:     ...

  5. YAML_02 playbook的ping脚本检测

    ansible]# vim ping.yml --- - hosts: all   remote_user: root   tasks:      - ping: ansible]# ansible- ...

  6. jsp实现大文件上传分片上传断点续传

    1,项目调研 因为需要研究下断点上传的问题.找了很久终于找到一个比较好的项目. 在GoogleCode上面,代码弄下来超级不方便,还是配置hosts才好,把代码重新上传到了github上面. http ...

  7. Codevs 1482 路线统计(矩阵乘法)

    1482 路线统计 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题目描述 Description N个节点的有向图, 求从start到finish刚好经过时 ...

  8. undefined null 与 字符串相加

        在进行一个字符串的判断的时候. 如下一段内容 const queryObj = {}; const  str = queryObj.criteriaStr + "" con ...

  9. Linux 系统安装下安装 mysql5.7(glibc版)

    转自:https://www.cnblogs.com/mujingyu/p/7689116.html 前言:经过一天半的折腾,终于把 mysql 5.7.17 版本安装上了 centos 7 系统上, ...

  10. SSM 整合 ehcache spring 配置文件报错

    添加 <!-- end MyBatis使用ehcache缓存 --> <cache:annotation-driven cache-manager="cacheManage ...