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、运行结果如下:

  

 

最新文章

  1. MySQL RANGE分区
  2. Tab切换
  3. 【转】GATK使用方法详解(包含bwa使用)
  4. SQL Server 2008 Windows身份验证改为混合模式身份验证
  5. Hadoop在win7下部署的问题
  6. ecshop 修改模板可输出php代码
  7. VTL说明文档
  8. cf C. Mittens
  9. Lucene.net常见功能实现知识汇总
  10. Python 自学 之 String 常见操作
  11. 支持向量机(SVM)之数学公式详细推导
  12. parallels desktop for mac安装虚拟机 之parallelsdesktop密钥 以及 parallels desktop安装win10的办公推荐可以提高办公效率
  13. 【转】BFG Repo-Cleaner: Removes large or troublesome blobs like git-filter-branch does, but faster.
  14. mysql 开发基础系列10 存储引擎 InnoDB 介绍
  15. 第5章 Java中的锁
  16. sqoop 使用
  17. vsftp为不同用户设置不同的ftp的根目录
  18. 杭电acm2059-龟兔赛跑 java
  19. ng工程升级cli版本
  20. 从Tomcat的处理web请求分析Java的内存模型

热门文章

  1. Vue创建组件的三种方式
  2. Go语言 - 流程控制 if else | for | switch case
  3. python - django (实现电子邮箱的账户注册和验证码功能)
  4. js模拟滚动条滚动
  5. learning java ATW ScrollPane
  6. 使用socket.io实现多房间通信聊天室
  7. mock模拟后台数据
  8. CF1163E Magical Permutation【线性基,构造】
  9. Python之☞float浮点数精度问题
  10. FLUENT质量加权平均和面积加权平均的区别【转载】