- 浏览: 1758054 次
- 性别:
- 来自: 大连
博客专栏
-
Spring数据库访问系列...
浏览量:173797
-
Android学习笔记
浏览量:368256
-
iBatis开发详解
浏览量:189386
-
Objective-C学习...
浏览量:99957
最新评论
-
iLidy:
引用[/c
Hibernate持久化对象的生命周期详解 -
fengzigogo:
您好,有这个项目架构的源码下载地址吗?
一种Java Web应用开发框架的构建(基于Struts2+Spring+FreeMarker)之一 -
spring_springmvc:
可以参考最新的文档:如何在eclipse jee中检出项目并转 ...
用Maven构建Java Web开发环境(Jetty容器)之二 -
springdata_springmvc:
spring mvc demo教程源代码下载,地址:http: ...
Spring 3之MVC & Security简单整合开发(二) -
赵庆辉:
看帖回复是美德,楼主讲的很清晰明了,看了豁然开朗.
Java String对象的经典问题(new String())
本部分主要介绍Spring的JDBC模板,JDBC模板的使用,结合Java开源小型数据库HSQL来做详细介绍。
JDBC都不陌生,它是Java语言操作关系型数据库的规范,是各类JDBC框架/ORM框架的核心基础。普通JDBC的操作过程是繁杂而且大量重复的,使用框架就是为了简化其中的冗余过程,提高代码可维护性。JDBC模板(jdbcTemplate)是为数据库操作提供的大量模板方法,可以在应用中作为数据持久层,这也是一个不错的选择。
HSQL(HyperSQL)是纯Java实现的关系型数据库,核心只有一个Jar文件,小巧玲珑。HSQL提供四种运行模式:内存模式,进程模式,服务器模式和Web服务器模式。其中内存模式就是内存数据库,在内存中模拟出数据库,可以执行各类数据库操作,但是数据仅仅生存在内存中而不会写入文件系统,也就是说不能持久到外部文件中。进程模式则可以将数据持久到外部文件中保存。服务器模式是运行一个服务器端,形成客户端和服务器端访问的模式,就类似于我们使用的Oracle,MySQL等主流数据库了。Web服务器则是通过HTTP访问的服务器模式,主要为了应对防火墙的拦截。四种模式的具体说明可以参考官方手册。
如此看来,HSQL也可以作为嵌入式数据库内嵌在程序中,这当然是可以的。在小型应用或演示应用中,使用HSQL作为数据库非常方便,其体积也不大。要使用HSQL,首先是引入到项目中来:
使用Maven构建项目,其目录结构如下:
这里先说明一下这个小应用的背景:车辆信息管理,为了说明问题,只有一个数据表,围绕这一个表的操作来展示Spring JDBC和HSQL的应用。
其中描述车辆信息的bean如下:
在这个目录结构的db下,创建一个vehicle.script文件,这是用来存储数据库脚本的文件,我们先创建一些基本的内容,比如用户,密码,权限和表结构。
首行是声明该数据库模式,之后创建一个数据表,声明为MEMORY TABLE,因为是先在内存中操作,之后会不会写入文件取决于我们使用的HSQL的模式。下面是创建用户,ROOT用户有密码保护,而SA没有。因为HSQL支持自增长的主键,那么这里我们就设置为自增的主键,在后面添加GENERATED BY DEFAULT AS IDENTITY(START WITH 1)即可。其余就是普通SQL了,注意一下数据类型,可能和其它数据库有不同。
基础的脚本就写好了,下面就是写程序来操作它,为了降低复杂性,这里封装一些工具类,完成基本的操作。如下:
在写一个针对HSQL的实现类:
注意这里的关闭方法,执行了SHUTDOWN命令,因为这样才在关闭数据库时将内存的数据写入到文件中来保存。准备好工具后,下面就是测试了,我们使用JUnit来进行单元测试:
在构造方法中初始化了连接,下面是对添加方法的测试,这就是一个标准的JDBC过程,插入成功executeUpdate()会返回1,那么最后做出断言,就可以运行测试了。测试成功,来看看数据库脚本文件,其中多了两行
上面是控制ID自增的语句,下面就是插入的SQL语句了,中文已经自动转为Unicode编码了。首次运行HSQL,会在脚本文件的同级目录中生成.propertes文件,其中是HSQL自动生成的一些运行属性,在不同模式下还会生成.log文件记录一些日志。比如在服务器模式下会有缓存特性,那么如果不到缓存写入文件时服务器就关闭了,其数据会暂时写入到log中,下次启动服务器时首先是将log文件写入脚本文件等。
下面来说查询操作,也很简单:
执行单元测试,因为就一条数据,肯定是正确的,则会打印出下面一行:
至此,对HSQL的简单使用就说完了,它的使用是非常之方便,可作为内嵌数据库运行,很好用。更多内容就要参考官方的文档了。这里不做过多介绍。下一篇将结合HSQL的服务器模式来开始介绍Spring的JDBC模块。
希望对使用者有用,欢迎交流。(未完待续)
JDBC都不陌生,它是Java语言操作关系型数据库的规范,是各类JDBC框架/ORM框架的核心基础。普通JDBC的操作过程是繁杂而且大量重复的,使用框架就是为了简化其中的冗余过程,提高代码可维护性。JDBC模板(jdbcTemplate)是为数据库操作提供的大量模板方法,可以在应用中作为数据持久层,这也是一个不错的选择。
HSQL(HyperSQL)是纯Java实现的关系型数据库,核心只有一个Jar文件,小巧玲珑。HSQL提供四种运行模式:内存模式,进程模式,服务器模式和Web服务器模式。其中内存模式就是内存数据库,在内存中模拟出数据库,可以执行各类数据库操作,但是数据仅仅生存在内存中而不会写入文件系统,也就是说不能持久到外部文件中。进程模式则可以将数据持久到外部文件中保存。服务器模式是运行一个服务器端,形成客户端和服务器端访问的模式,就类似于我们使用的Oracle,MySQL等主流数据库了。Web服务器则是通过HTTP访问的服务器模式,主要为了应对防火墙的拦截。四种模式的具体说明可以参考官方手册。
如此看来,HSQL也可以作为嵌入式数据库内嵌在程序中,这当然是可以的。在小型应用或演示应用中,使用HSQL作为数据库非常方便,其体积也不大。要使用HSQL,首先是引入到项目中来:
<dependency> <groupId>hsqldb</groupId> <artifactId>hsqldb</artifactId> <version>1.8.0.10</version> <type>jar</type> <scope>compile</scope> </dependency>
使用Maven构建项目,其目录结构如下:
这里先说明一下这个小应用的背景:车辆信息管理,为了说明问题,只有一个数据表,围绕这一个表的操作来展示Spring JDBC和HSQL的应用。
其中描述车辆信息的bean如下:
package org.ourpioneer.vehicle.bean; /** * 车辆信息描述bean * * @author Nanlei * */ public class Vehicle { private int id;// 标识符 private String plate;// 车牌号 private String chassis;// 底盘号 private String color;// 颜色 private int wheel;// 轮数 private int seat;// 座位数 /** * 默认构造方法 */ public Vehicle() { super(); } /** * 初始化构造方法 * * @param plate * @param chassis * @param color * @param wheel * @param seat */ public Vehicle(String plate, String chassis, String color, int wheel, int seat) { super(); this.plate = plate; this.chassis = chassis; this.color = color; this.wheel = wheel; this.seat = seat; } //省略所有getter和setter方法 @Override public String toString() { return "vehicle [chassis=" + chassis + ", color=" + color + ", id=" + id + ", plate=" + plate + ", seat=" + seat + ", wheel=" + wheel + "]"; } }
在这个目录结构的db下,创建一个vehicle.script文件,这是用来存储数据库脚本的文件,我们先创建一些基本的内容,比如用户,密码,权限和表结构。
CREATE SCHEMA PUBLIC AUTHORIZATION DBA CREATE MEMORY TABLE VEHICLE( ID INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 1) NOT NULL PRIMARY KEY, PLATE VARCHAR_IGNORECASE(20) NOT NULL, CHASSIS VARCHAR_IGNORECASE(20) NOT NULL, COLOR VARCHAR_IGNORECASE(10) NOT NULL, WHEEL INTEGER NOT NULL, SEAT INTEGER NOT NULL) CREATE USER ROOT PASSWORD "123" CREATE USER SA PASSWORD "" GRANT DBA TO ROOT GRANT DBA TO SA SET WRITE_DELAY 10
首行是声明该数据库模式,之后创建一个数据表,声明为MEMORY TABLE,因为是先在内存中操作,之后会不会写入文件取决于我们使用的HSQL的模式。下面是创建用户,ROOT用户有密码保护,而SA没有。因为HSQL支持自增长的主键,那么这里我们就设置为自增的主键,在后面添加GENERATED BY DEFAULT AS IDENTITY(START WITH 1)即可。其余就是普通SQL了,注意一下数据类型,可能和其它数据库有不同。
基础的脚本就写好了,下面就是写程序来操作它,为了降低复杂性,这里封装一些工具类,完成基本的操作。如下:
package org.ourpioneer.vehicle.util; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.Statement; /** * 数据库连接工具类基类 * * @author Nanlei * */ public abstract class DatabaseConnection { protected Connection conn; /** * 关闭数据库连接 * * @throws SQLException */ public void close() throws SQLException { conn.close(); } /** * 创建语句对象 * * @return * @throws SQLException */ public Statement createStatement() throws SQLException { return conn.createStatement(); } /** * 创建预处理SQL语句对象 * * @param sql * @return * @throws Exception */ public PreparedStatement createPreparedStatement(String sql) throws SQLException { return conn.prepareStatement(sql); } }
在写一个针对HSQL的实现类:
package org.ourpioneer.vehicle.util; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; /** * Hsql数据库连接工具类 * * @author Nanlei * */ public class HsqldbConnection extends DatabaseConnection { /** * 构造方法,加载HSQL数据库驱动并获取连接对象 * * @param databaseFileNamePrefix * @throws SQLException */ public HsqldbConnection(String path, String prefix) throws SQLException { try { Class.forName("org.hsqldb.jdbcDriver"); } catch (ClassNotFoundException e) { throw new SQLException("HSQLDB database driver is not found"); } conn = DriverManager.getConnection("jdbc:hsqldb:file:" + path + prefix, "ROOT", "123"); } /** * 关闭数据库和连接 */ public void close() throws SQLException { Statement stat = createStatement(); stat.execute("SHUTDOWN"); super.close(); } }
注意这里的关闭方法,执行了SHUTDOWN命令,因为这样才在关闭数据库时将内存的数据写入到文件中来保存。准备好工具后,下面就是测试了,我们使用JUnit来进行单元测试:
package org.ourpioneer.vehicle; import java.sql.PreparedStatement; import java.sql.SQLException; import junit.framework.TestCase; import org.ourpioneer.vehicle.util.HsqldbConnection; public class DBTest extends TestCase { private HsqldbConnection conn; public DBTest() throws SQLException { conn = new HsqldbConnection( "src/main/resources/org/ourpioneer/vehicle/db/", "vehicle"); } public void testInsert() throws SQLException { String sql = "insert into vehicle(PLATE,CHASSIS,COLOR,WHEEL,SEAT) values(?,?,?,?,?)"; PreparedStatement pstat = conn.createPreparedStatement(sql); pstat.setString(1, "辽BTEST"); pstat.setString(2, "1234567890"); pstat.setString(3, "BLACK"); pstat.setInt(4, 4); pstat.setInt(5, 6); int execute = pstat.executeUpdate(); pstat.close(); conn.close(); assertEquals(1, execute); } }
在构造方法中初始化了连接,下面是对添加方法的测试,这就是一个标准的JDBC过程,插入成功executeUpdate()会返回1,那么最后做出断言,就可以运行测试了。测试成功,来看看数据库脚本文件,其中多了两行
ALTER TABLE VEHICLE ALTER COLUMN ID RESTART WITH 2 INSERT INTO VEHICLE VALUES(1,'\u8fbdBTEST','1234567890','BLACK',4,6)
上面是控制ID自增的语句,下面就是插入的SQL语句了,中文已经自动转为Unicode编码了。首次运行HSQL,会在脚本文件的同级目录中生成.propertes文件,其中是HSQL自动生成的一些运行属性,在不同模式下还会生成.log文件记录一些日志。比如在服务器模式下会有缓存特性,那么如果不到缓存写入文件时服务器就关闭了,其数据会暂时写入到log中,下次启动服务器时首先是将log文件写入脚本文件等。
下面来说查询操作,也很简单:
public void testQuery() throws SQLException { String sql = "select * from vehicle"; Statement stat = conn.createStatement(); ResultSet rs = stat.executeQuery(sql); List<Vehicle> vehicles = new ArrayList<Vehicle>(); Vehicle vehicle = null; while (rs.next()) { vehicle = new Vehicle(); vehicle.setId(rs.getInt("ID")); vehicle.setPlate(rs.getString("PLATE")); vehicle.setChassis(rs.getString("CHASSIS")); vehicle.setColor(rs.getString("COLOR")); vehicle.setWheel(rs.getInt("WHEEL")); vehicle.setSeat(rs.getInt("SEAT")); vehicles.add(vehicle); } for (Vehicle v : vehicles) { System.out.println(v.toString()); } assertEquals(1, vehicles.size()); }
执行单元测试,因为就一条数据,肯定是正确的,则会打印出下面一行:
vehicle [chassis=1234567890, color=BLACK, id=1, plate=辽BTEST, seat=6, wheel=4]
至此,对HSQL的简单使用就说完了,它的使用是非常之方便,可作为内嵌数据库运行,很好用。更多内容就要参考官方的文档了。这里不做过多介绍。下一篇将结合HSQL的服务器模式来开始介绍Spring的JDBC模块。
希望对使用者有用,欢迎交流。(未完待续)
评论
1 楼
stephansun
2011-01-14
vehicle.script中的建表语句需要写在一行中(CREATE MEMORY TABLE VEHICLE...),刚开始想当然的分行了,结果报错。
发表评论
-
iBatis操作DDL和映射继承
2012-09-09 21:46 9280本文系iBatis开发详解系列文章之iBatis操作D ... -
iBatis查询复杂集合
2012-09-04 20:23 15775本文系iBatis开发详解系列文章之在iBatis查询 ... -
iBatis中使用XML
2012-08-29 19:57 7706本文系iBatis开发详解系列文章之在iBatis中使 ... -
iBatis执行非查询语句(CRUD,函数和过程)
2012-08-26 21:40 9326CRUD操作中除了查询操作,其他都统一称为更新操作,因 ... -
Spring数据库访问之iBatis(二)
2012-06-10 13:56 5807接上文,我们继续来研究Spring和iBatis的整合 ... -
Spring数据库访问之iBatis(一)
2012-01-02 18:45 16000为了丰富博客专栏【Spring数据库访问系列】的内容, ... -
我的视频教程《中小企业OA系统》
2011-07-29 22:27 7752经过5个月的制作,和华章合作的《中小企业OA系统》Ja ... -
iBatis分页(基于Struts2和Freemarker)
2011-05-02 10:05 13129之前介绍过基于Hibernate分页的原理和设计,这里 ... -
Spring数据库访问之ORM(三)
2011-03-02 20:35 17624本文接上一篇继续研究。 之前我们使用的是Hib ... -
Spring数据库访问之ORM(二)
2011-02-16 13:19 23400本文接上一篇继续来研究Spring的ORM模块。 ... -
Spring数据库访问之ORM(一)
2011-01-27 10:54 30832Spring数据库访问中另外一大模块就是ORM,ORM ... -
Spring数据库访问之异常处理
2011-01-19 10:29 27518使用JDBC API时,很 ... -
Spring数据库访问(HSQL)(四)
2011-01-16 21:49 14595本文接上一篇继续研究Spring的JDBC模板。 ... -
Spring数据库访问(HSQL)(三)
2011-01-13 10:07 13447本文接上一篇继续研究JDBC模板。 之前说的都 ... -
Spring数据库访问(HSQL)(二)
2011-01-11 11:27 10732上一篇我们介绍了 ... -
Spring 3之MVC & Security简单整合开发(三)
2010-12-03 19:04 22083本文接上一篇继续深入研究Security框架。 ... -
Spring 3之MVC & Security简单整合开发(二)
2010-12-01 20:29 60103本文接上一篇继续 ... -
Spring 3之MVC & Security简单整合开发(一)
2010-11-30 22:00 42658Spring的MVC模块是一种简洁的Web应用框架,实 ... -
iBatis查询select详解
2010-08-07 12:19 40532<select>是iBatis已经映射的语 ... -
iBatis查询API
2010-07-31 13:04 17699先说点基础的内容 ...
相关推荐
在本篇博文中,我们将深入探讨Spring框架在数据库访问方面的应用,特别关注使用HSQL内存数据库的实践。Spring是Java领域最广泛使用的轻量级框架之一,它为开发者提供了全面的事务管理、数据访问集成以及IoC...
在"Spring数据库访问(HSQL)(三)"这个主题中,博主可能详细讲解了如何配置Spring与HSQL的集成,以及如何利用Spring的数据访问组件进行数据库操作。 首先,我们需要了解Spring的JdbcTemplate和HibernateTemplate...
3. 嵌入式数据源(org.springframework.jdbc.datasource.embedded.EmbeddedDatabase):主要用于本地文件系统数据库,如HSQL、H2、Derby等。 二、事务(Transaction) 事务用于提供数据完整性,并在并发访问下确保...
5. Hsql:Hsql是一个轻量级的关系型数据库管理系统,常用于开发和测试环境中。它可以运行在内存中,也可以持久化到磁盘。由于其小巧、快速和易于使用的特点,它常常被用来作为Java应用的测试数据库。 6. Jetty:...
HSQldb 可以与各种Java应用程序框架如Spring、Hibernate等无缝集成,方便地在应用中使用数据库。 ### 官方手册 《hsqldb_guide.pdf》应该是HSQldb的官方用户指南,包含了详细的使用说明和API参考,是学习和使用...
该项目通过springcloud集成了mybatis操作mysql数据库,项目主要分为7个model模块,配置模块(config),注册模块(discovery),监控模块(monitor),服务模块_mybatisService(通过mybatis操作mysql),服务模块_...
通过Spring Boot和HSQL在内存DB中使用JDBC。 周六 通过Spring Boot和H2在内存DB(包括Web控制台)中使用JPA。 Spring Data REST 液基 H2数据库 饱和液基 通过Spring Boot和HSQL在内存DB中使用JDBC和 。 休息 通过...
这些起步依赖包含了启动特定功能所需的依赖集合,如`spring-boot-starter-web`用于构建Web应用,`spring-boot-starter-data-jpa`则用于数据库访问。 2. **自动配置(Auto Configuration)**:Spring Boot根据项目中...
这个名为"spring-jpa-hsqldb"的项目是一个很好的实例,它展示了如何将这三个组件整合在一起,用于创建一个简单的数据库驱动的应用程序。下面我们将深入探讨这些技术以及它们在项目中的应用。 首先,让我们了解...
但是,该项目对于学习和尝试Spring Boot和嵌入式HSQL很有用。 Todo API的新版本位于 。 Todo RESTful API被实现为运行嵌入式版本Tomcat的应用程序。 出于演示目的,数据存储是可通过访问的内存数据库。 它使用进行...
【标题】"springMybatiesHsql"是一个基于Spring、MyBatis和HSQL数据库的Java核心CRUD项目。这个项目旨在提供一个基础框架,用于快速开发数据存储和检索功能,特别适合学习和实践Spring与MyBatis的集成以及使用内存...
在Spring Boot框架中,JDBC(Java Database Connectivity)是一个常用的数据访问组件,它允许开发者直接执行SQL语句来与数据库进行交互。本篇文章将详细探讨Spring Boot JDBC的使用,包括如何配置、创建数据源、执行...
支持Oracle、MySQL、Postgres、MSSQL、GBase、SQLite、HSQL、Derby等数据库。除了API方式下的操作能兼容各个数据库之外,就连SQL的本地化查询也能使之兼容。JMX动态调节 可以用JMX查看框架运行统计。框架的debug...
请注意: 本demo已经自带了HSQL数据库,所以不需要配置数据库 ******************************* * 系统结构介绍 ******************************* dao层使用 ibatis3 并使用分页方言(Diaelct)进行数据分页,具体请查看...
每个起步依赖都包含了一组已经过调整和预配置的库,比如`spring-boot-starter-web`用于web开发,`spring-boot-starter-data-jpa`用于数据库访问。 2. **内嵌式Servlet容器**:SpringBoot可以内嵌Tomcat、Jetty等...
总的来说,泛型DAO是Java开发中一个实用的设计模式,它结合了Hibernate的强大功能和泛型的灵活性,为开发人员提供了高效、可复用的数据库访问层。在Spring+Hibernate环境下,通过合理地实现和使用泛型DAO,可以大大...
首先,DAO(Data Access Object)模式是一种设计模式,它的主要作用是封装数据库访问的逻辑,使得业务层与数据访问层解耦。泛型DAO是DAO模式的一种改进,通过使用Java泛型,我们可以创建一个适用于任何类型的DAO接口...
在Spring Boot中,JdbcTemplate是Spring框架提供的一个用于简化JDBC操作的工具类,它为开发者提供了更加方便、健壮的数据库访问接口。通过使用JdbcTemplate,我们可以避免编写大量重复的JDBC模板代码,比如打开和...
在服务器模式下,数据库作为一个独立的服务运行,允许多个客户端连接和并发访问。 4. **内存与磁盘存储** - HSQldb可以将数据存储在内存中,适合短期、临时的数据处理;也可以存储在磁盘上,适合长期的数据持久化...
在Java开发领域,特别是针对企业级应用的持久层操作中,Hibernate作为一款优秀的ORM(Object Relational Mapping)框架,被广泛应用于数据访问层。在配置Hibernate时,一个重要的参数是`hibernate.dialect`,即...