Apache Derby的使用

Apache Derby是关系型数据库,可以嵌入式方式运行,也可以独立运行,当使用嵌入式方式运行时常用于单元测试,本篇我们就使用单元测试来探索Apache Derby的使用

一、使用IDEA创建Maven项目

打开IDEA创建Maven项目,这里我使用的JDK版本为1.8版本。

二、添加依赖

XML 复制代码
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>4.3.30.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.apache.derby</groupId>
    <artifactId>derby</artifactId>
    <version>10.14.2.0</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.13.1</version>
    <scope>test</scope>
</dependency>

这里使用spring-jdbc主要是为了使用spring执行SQL脚本、执行SQL语句时使用;嵌入式运行Apache Derby需要引入derby的包;单元测试引入了junit

三、准备初始化脚本

在src/test/resources下新建demo.sql

sql 复制代码
DROP TABLE T_USER;

CREATE TABLE T_USER(
    id INT NOT NULL GENERATED BY DEFAULT AS IDENTITY (START WITH 1),
    username VARCHAR(255) NOT NULL
);

INSERT INTO T_USER(username) VALUES('张三'),('李四'),('王五');

脚本中我们删除并创建了T_USER表,向表中插入了三条数据。

四、单元测试准备工作

在src/test/java下新建cn.horse.demo包,在包下新建DatabaseTest类

java 复制代码
package cn.horse.demo;

import org.junit.Before;
import org.junit.Test;
import org.springframework.core.io.ClassPathResource;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowCallbackHandler;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.jdbc.datasource.init.ScriptUtils;

import javax.sql.DataSource;
import java.sql.ResultSet;
import java.sql.SQLException;

public class DatabaseTest {

    static final DataSource dataSource;
    static final JdbcTemplate jdbcTemplate;
    static {
        DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource();
        driverManagerDataSource.setDriverClassName("org.apache.derby.jdbc.EmbeddedDriver");
        driverManagerDataSource.setUrl("jdbc:derby:demo;create=true");
        driverManagerDataSource.setUsername("");
        driverManagerDataSource.setPassword("");
        dataSource = driverManagerDataSource;
        jdbcTemplate = new JdbcTemplate(dataSource);
    }

    @Before
    public void init() throws SQLException {
        ScriptUtils.executeSqlScript(dataSource.getConnection(), new ClassPathResource("demo.sql"));
    }
}

DatabaseTest类中我们在类加载时初始化了数据源和JdbcTemplate对象;在单元测试执行之前,我们执行了初始化脚本;

五、查询数据

在DatabaseTest类中新增查询方法

java 复制代码
@Test
public void find() {
    query();
}

private void query() {
    jdbcTemplate.query("SELECT id, username FROM T_USER", new RowCallbackHandler() {
        @Override
        public void processRow(ResultSet rs) throws SQLException {
            System.out.println("id: " + rs.getInt("id") + ", username: " + rs.getString("username"));
        }
    });
}

执行单元测试的结果如下:

六、添加数据

在DatabaseTest类中新增添加方法

java 复制代码
@Test
public void add() {
    jdbcTemplate.execute("INSERT INTO T_USER(username) VALUES('赵六')");
    query();
}

执行单元测试的结果如下:

七、更新数据

在DatabaseTest类中新增更新方法

java 复制代码
@Test
public void update() {
    jdbcTemplate.execute("UPDATE T_USER SET username='张三1' WHERE id = 1");
    query();
}

执行单元测试的结果如下:

八、删除数据

在DatabaseTest类中新增删除方法

java 复制代码
@Test
public void delete() {
    jdbcTemplate.execute("DELETE FROM T_USER WHERE id = 1");
    query();
}

执行单元测试的结果如下:

相关推荐
小单于PRO1 分钟前
Spring Boot 实现构建一个轻量级地图瓦片服务
java·spring boot·后端
小二·3 分钟前
MyBatis基础入门《十二》批量操作优化:高效插入/更新万级数据,告别慢 SQL!
数据库·sql·mybatis
Selegant4 分钟前
Spring Boot 3 + Java 21 全新特性实战:虚拟线程、结构化并发与 Record 类型
java·spring boot·后端
何中应7 分钟前
【面试题-6】MySQL
数据库·后端·mysql·面试题
路遥_1310 分钟前
银河麒麟 V10 安装部署瀚高数据库 HighGoDB 4.5 全流程(统信UOS Server 20同理)
数据库
TDengine (老段)12 分钟前
从关系型数据库到时序数据库的思维转变
大数据·数据库·mysql·时序数据库·tdengine·涛思数据·非关系型数据库
老兵发新帖13 分钟前
ubuntu网络管理功能分析
数据库·ubuntu·php
2301_7683502321 分钟前
MySQL服务配置与管理
数据库·mysql
Jinkxs29 分钟前
Java 架构 02:DDD 领域模型设计实战(限界上下文划分)
java·开发语言·架构
+VX:Fegn089529 分钟前
计算机毕业设计|基于springboot + vue旅游信息推荐系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计·旅游