H__D  

Hsqldb与项目集成

进行模式下集成

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

  采用jdbc集成的方式

 1 package com.test.hsqldb;
 2 
 3 import java.sql.Connection;
 4 import java.sql.DriverManager;
 5 import java.sql.PreparedStatement;
 6 import java.sql.ResultSet;
 7 import java.sql.SQLException;
 8 import java.sql.Statement;
 9 
10 public class TestHsqldbFile {
11 
12     
13     public static void main(String[] args) throws SQLException, ClassNotFoundException {
14         
15         // 加载HSQL DB的JDBC驱动
16         Class.forName("org.hsqldb.jdbc.JDBCDriver");
17         
18         // 链接内存库,自动创建内存数据库,得到联接对象  connection
19         String url="jdbc:hsqldb:file:testdb/testdir";
20         Connection con=DriverManager.getConnection(url, "sa", "");
21         
22         // 新建数据表
23         String ctreateTable="DROP TABLE test IF EXISTS; create table test(id integer,name VARCHAR(22) )";
24         Statement createStatement = con.createStatement();
25         long f1 = createStatement.executeUpdate(ctreateTable);
26         System.out.println("创建表:" + f1);
27         
28         // 插入数据
29         String insertSql = "INSERT INTO test VALUES(1,'小明')";
30         Statement insertStatement = con.createStatement();
31         long f2 = insertStatement.executeUpdate(insertSql);
32         System.out.println("插入数据:" + f2);
33         
34         // 查询数据
35         String selectSql = "select id,name from test";
36         PreparedStatement prepareStatement = con.prepareStatement(selectSql);
37         // 发送SQL  返回一个ResultSet
38         ResultSet rs=prepareStatement.executeQuery();
39 
40         // 编历结果集
41         while(rs.next())//从数据库的取一行数据,是否还有下一行
42         {
43             int id=rs.getInt(1);  //从1开始
44             String name=rs.getString(2);
45             System.out.println("id:"+id+"\t名称:"+name);
46         }
47         
48         // 关闭连接
49         con.close();
50         
51     }
52 
53 }

 

集成到web项目中

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

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

 1 package com.test.hsqldb.listener;
 2 
 3 import java.io.IOException;
 4 
 5 import javax.servlet.ServletContextEvent;
 6 import javax.servlet.ServletContextListener;
 7 
 8 import org.hsqldb.persist.HsqlProperties;
 9 import org.hsqldb.server.Server;
10 import org.hsqldb.server.ServerAcl.AclFormatException;
11 import org.slf4j.Logger;
12 import org.slf4j.LoggerFactory;
13 
14 
15 /**
16  * HsqlDB监听启动类
17  * @author H__D
18  * @date 2019-05-26 22:38:26
19  *
20  */
21 public class HsqlDBListener implements ServletContextListener {
22 
23     private static final Logger log = LoggerFactory.getLogger(HsqlDBListener.class);
24     
25     private Server server = null;
26     
27     /**
28      * 当Servlet 容器启动Web 应用时调用该方法。在调用完该方法之后,容器再对Filter 初始化,
29      * 并且对那些在Web 应用启动时就需要被初始化的Servlet 进行初始化。
30      */
31     @Override
32     public void contextInitialized(ServletContextEvent sce) {
33         
34         // 以服务模式运行hsqldb
35         // 新建一个hsqldb服务对象
36         server = new Server();
37         // 设置属性
38 //        HsqlProperties p = new HsqlProperties(null);
39 //        server.setProperties(p);
40         // 设置数据库名
41         server.setDatabaseName(0, "testdb");
42         // 设置数据库目录
43         server.setDatabasePath(0, sce.getServletContext().getRealPath("/") + "testdb/"+"testdir");
44         // 设置端口
45         server.setPort(9001);
46         //可以使用自定义编写器
47         server.setLogWriter(null); 
48         //可以使用自定义编写器
49         server.setErrWriter(null);  
50          // 启动
51         server.start();
52         
53         log.info("Server Hsqldb Start ...");
54     }
55 
56     /**
57      * 当Servlet 容器终止Web 应用时调用该方法。在调用该方法之前,容器会先销毁所有的Servlet 和Filter 过滤器。
58      */
59     @Override
60     public void contextDestroyed(ServletContextEvent sce) {
61         // TODO Auto-generated method stub
62         // 关闭
63         server.shutdownCatalogs(1);
64         
65         log.info("Server Hsqldb Stop ...");
66     }
67     
68     
69 }

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

1 <listener>
2     <listener-class>com.test.hsqldb.listener.HsqlDBListener</listener-class>
3 </listener>

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

 

与Spring集成

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

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

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

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4     xmlns:context="http://www.springframework.org/schema/context"
 5     xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
 6     xmlns:tx="http://www.springframework.org/schema/tx"
 7     xmlns:jdbc="http://www.springframework.org/schema/jdbc"
 8     xsi:schemaLocation="http://www.springframework.org/schema/beans 
 9         http://www.springframework.org/schema/beans/spring-beans.xsd
10         http://www.springframework.org/schema/context 
11         http://www.springframework.org/schema/context/spring-context-4.0.xsd
12           http://mybatis.org/schema/mybatis-spring 
13           http://mybatis.org/schema/mybatis-spring.xsd
14         http://www.springframework.org/schema/tx 
15         http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
16         http://www.springframework.org/schema/jdbc
17         http://www.springframework.org/schema/jdbc/spring-jdbc-4.0.xsd">
18 
19     <!-- 引入数据库的配置文件 -->
20     <context:property-placeholder
21         location="classpath:dbconfig.properties" />
22 
23     
24 
25     <!-- 数据源:Spring用来控制业务逻辑。数据源、事务控制、aop -->
26     <bean id="dataSource"
27         class="com.mchange.v2.c3p0.ComboPooledDataSource">
28         <property name="jdbcUrl" value="${jdbc.url}"></property>
29         <property name="driverClass" value="${jdbc.driver}"></property>
30         <property name="user" value="${jdbc.username}"></property>
31         <property name="password" value="${jdbc.password}"></property>
32     </bean>
33     
34     <!-- 初始化脚本 -->
35     <jdbc:initialize-database data-source="dataSource">
36         <jdbc:script location="classpath:hsqldb-schema.sql" />
37         <jdbc:script location="classpath:hsqldb-dataload.sql" />
38     </jdbc:initialize-database>
39     
40 
41     <!-- spring事务管理 -->
42     <bean id="dataSourceTransactionManager"
43         class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
44         <property name="dataSource" ref="dataSource"></property>
45     </bean>
46 
47     <!-- 开启基于注解的事务 -->
48     <tx:annotation-driven
49         transaction-manager="dataSourceTransactionManager" />
50 
51 
52 
53     <!-- 整合mybatis 目的:1、spring管理所有组件。mapper的实现类。 service==>Dao @Autowired:自动注入mapper; 
54         2、spring用来管理事务,spring声明式事务 -->
55     <!--创建出SqlSessionFactory对象 -->
56     <bean id="sqlSessionFactoryBean"
57         class="org.mybatis.spring.SqlSessionFactoryBean">
58         <property name="dataSource" ref="dataSource"></property>
59         <!-- configLocation指定全局配置文件的位置 -->
60         <property name="configLocation"
61             value="classpath:mybatis-config.xml"></property>
62         <!--mapperLocations: 指定mapper文件的位置 -->
63         <property name="mapperLocations"
64             value="classpath:mybatis/mapper/*.xml"></property>
65     </bean>
66 
67     <!--配置一个可以进行批量执行的sqlSession -->
68     <bean id="sqlSession"
69         class="org.mybatis.spring.SqlSessionTemplate">
70         <constructor-arg name="sqlSessionFactory"
71             ref="sqlSessionFactoryBean"></constructor-arg>
72         <constructor-arg name="executorType" value="BATCH"></constructor-arg>
73     </bean>
74 
75     <!-- 扫描所有的mapper接口的实现,让这些mapper能够自动注入; base-package:指定mapper接口的包名 -->
76     <mybatis-spring:scan
77         base-package="com.test.hsqldb.dao" />
78 
79 </beans>

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

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

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

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

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

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

  6、运行结果如下:

  

 

 

posted on 2019-05-27 02:12  H__D  阅读(681)  评论(0编辑  收藏  举报