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();
}

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

相关推荐
听雪楼主.2 分钟前
Oracle Undo Tablespace 使用率暴涨案例分析
数据库·oracle·架构
我科绝伦(Huanhuan Zhou)2 分钟前
KINGBASE集群日常维护管理命令总结
数据库·database
妖灵翎幺7 分钟前
Java应届生求职八股(2)---Mysql篇
数据库·mysql
HMBBLOVEPDX10 分钟前
MySQL的事务日志:
数据库·mysql
Java小白程序员12 分钟前
Spring Framework :IoC 容器的原理与实践
java·后端·spring
xuTao6671 小时前
Easy Rules 规则引擎详解
java·easy rules
m0_480502642 小时前
Rust 入门 KV存储HashMap (十七)
java·开发语言·rust
杨DaB2 小时前
【SpringBoot】Swagger 接口工具
java·spring boot·后端·restful·swagger
YA3332 小时前
java基础(九)sql基础及索引
java·开发语言·sql
桦说编程2 小时前
方法一定要有返回值 \ o /
java·后端·函数式编程