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

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

相关推荐
心态与习惯14 分钟前
Julia 初探,及与 C++,Java,Python 的比较
java·c++·python·julia·比较
imuliuliang15 分钟前
存储过程(SQL)
android·数据库·sql
考虑考虑16 分钟前
SQL语句中的order by可能造成时间重复
数据库·后端·mysql
一叶飘零_sweeeet26 分钟前
优秀文章合集
java
zopple44 分钟前
ThinkPHP5.x与3.x核心差异解析
java·python·php
2401_8359568144 分钟前
Golang怎么写基准测试benchmark_Golang基准测试教程【完整】
jvm·数据库·python
南境十里·墨染春水1 小时前
C++ 笔记 thread
java·开发语言·c++·笔记·学习
南境十里·墨染春水1 小时前
C++ 笔记 高级线程同步原语与线程池实现
java·开发语言·c++·笔记·学习
阿杰学AI1 小时前
AI核心知识129—大语言模型之 向量数据库(简洁且通俗易懂版)
数据库·人工智能·ai·语言模型·自然语言处理·向量数据库·vector database
SPC的存折1 小时前
D在 Alpine 容器中手动搭建 Discuz 全攻略(包含镜像一键部署脚本,可直接用)
linux·数据库·mysql·缓存