zoukankan      html  css  js  c++  java
  • 【DataBase】Hsqldb与项目集成

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

      

     

  • 相关阅读:
    四层、七层负载均衡的区别
    confd+etcd实现高可用自动发现
    从零开始搭建etcd分布式存储系统+web管理界面
    从零开始搭建Prometheus自动监控报警系统
    tcpdump工具使用说明
    Nginx的负载均衡
    Nginx的正向代理与反向代理详解
    linux集群自动化搭建(生成密钥对+分发公钥+远程批量执行脚本)
    linux文件权限总结(创建root不可以删除文件、只可追加的日志文件等)
    前端技巧备忘
  • 原文地址:https://www.cnblogs.com/h--d/p/10928672.html
Copyright © 2011-2022 走看看