【DataBase】Hsqldb与项目集成
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与项目集成的更多相关文章
- 【DataBase】H2 DateBase与项目集成
本例介绍H2与web项目的集成 项目启动H2数据库 1.新建Maven Web项目,参考:[Maven]Eclipse 使用Maven创建Java Web项目 2.引入h2的jar包依赖 <de ...
- Taurus.MVC 微服务框架 入门开发教程:项目集成:5、统一的日志管理。
系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...
- 现有iOS项目集成React Native过程记录
在<Mac系统下React Native环境搭建>配置了RN的开发环境,然后,本文记录在现有iOS项目集成React Native的过程,官方推荐使用Cocoapods,项目一开始也是使用 ...
- Vuejs实例-02Vue.js项目集成ElementUI
Vuejs实例-02Vue.js项目集成ElementUI 0:前言 vue.js的UI组件库,在git上有多个项目,我见的使用者比较多的是iView和Element.两个组件库,组件都很丰富. 官网 ...
- 项目集成自动分词系统ansj,实现自定义词库
一,分词系统地址:https://github.com/NLPchina/ansj_seg 二,为什么选择ansj? 1.项目需求: 我们平台要做手机售后的舆情分析,即对购买手机的用户的评论进行分析. ...
- Vue.js项目集成ElementUI
Vuejs实例-02Vue.js项目集成ElementUI Vuejs实例-02Vue.js项目集成ElementUI 0:前言 vue.js的UI组件库,在git上有多个项目,我见的使用者比较多 ...
- 开源一款强大的文件服务组件(QJ_FileCenter)(系列三 访问接口与项目集成)
系列文章 1. 开源一款强大的文件服务组件(QJ_FileCenter)(系列一) 2. 开源一款强大的文件服务组件(QJ_FileCenter)(系列二 安装说明) 3. 开源一款强大的文件服务组件 ...
- iOS-Cordova集成开发,已有项目集成cordova
iOS-Cordova集成开发,已有项目集成cordova 项目组准备开发一个APP,要求Android和iOS端页面完全一致,除了一个页面跟业务相关的不同,其他界面基本一致,因此,萌生一个想法,关于 ...
- VS2017不能生成Database Unit Test项目
问题描述: VS2017生成Database Unit Test项目时,报出如下错误,但该项目在VS2015中能正常生成: 主要是因为下面两个程序集找不到引用: Microsoft.Data.Tool ...
随机推荐
- 三大框架整合模板ssh
1.web.xml配置 <!-- 让spring随web启动而创建的监听器 --> <listener> <listener-class>org.springfra ...
- DevExpress21:SplashScreenManager控件实现启动闪屏和等待信息窗口
DevExpress中SplashScreenManager这个控件的主要作用就是显示程序集加载之前的进度条显示和进行耗时操作时候的等待界面. 一.SplashScreenManager控件的使用 1 ...
- JAVA BIO至NIO演进
主要阐述点: 1.同步/异步 or 阻塞/非阻塞 2.网络模型演进 3.NIO代码示例 一.同步/异步 or 阻塞/非阻塞 同步/异步:核心点在于是否等待结果返回.同步即调用者必须等到结果才返回, ...
- linux下Boost序列化问题解决
由于项目需要,要使用boost,所以在网上找了一些例子帮助理解,其中遇到很多问题,再次总结记录一下.#include <boost/archive/text_oarchive.hpp> # ...
- Django REST framework认证权限和限制和频率
认证.权限和限制 身份验证是将传入请求与一组标识凭据(例如请求来自的用户或其签名的令牌)相关联的机制.然后 权限 和 限制 组件决定是否拒绝这个请求. 简单来说就是: 认证确定了你是谁 权限确定你能不 ...
- UVALive 5099 Nubulsa Expo(全局最小割)
题面 vjudge传送门 题解 论文题 见2016绍兴一中王文涛国家队候选队员论文<浅谈无向图最小割问题的一些算法及应用>4节 全局最小割 板题 CODE 暴力O(n3)O(n^3)O(n ...
- HTML中的标签列表
1 :基础标签 <!DOCTYPE> :定义文档类型 <title>:定义文档标题 <h1>to<h2>定义HTML标题,其中h1到h6表示字体大小依次 ...
- linux的计划任务操作
1.cron服务来设置 计划任务查看与设置命令:crontab 包括条目: 分钟m:0-59 小时h:0-23 月日dom:1-31 月份mon:1-12 星期dow:0-7 例子: 每隔2小时处理一 ...
- yii2.0简单使用elasticsearch
1.安装扩展 /c/phpStudy/PHPTutorial/php/php-5.5.38/php /c/ProgramData/ComposerSetup/bin/composer.phar req ...
- div双击全屏,再双击恢复到原来的状态vue,js来做
需求是这样的: 有四个视频,视频是在4个区域,点击之后就全屏 <!DOCTYPE html> <html lang="en"> <head> & ...