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

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

相关推荐
barcke2 分钟前
【深度解析】Java接入DeepSeek大模型:从零实现流式对话+多轮会话管理(完整项目实战) —— SpringBoot整合、API安全封装、性能优化全攻略
java·spring boot
卷心菜不卷Iris5 分钟前
第1章大型互联网公司的基础架构——1.9 LSM Tree
数据库·lsm-tree·互联网大厂·基础架构
zl97989914 分钟前
MybatisPlus-注解
java·spring·maven
杰九24 分钟前
【环境配置】maven,mysql,node.js,vue的快速配置与上手
java·vue.js·spring boot·mysql·node.js·maven
wapicn9935 分钟前
‌挖数据平台对接DeepSeek推出一键云端部署功能:API接口驱动金融、汽车等行业智能化升级
java·人工智能·python·金融·汽车·php
GISer_Qing1 小时前
ASP.NET Core 8.0学习笔记(二十七)——数据迁移:Migrations深入与其他迁移命令
数据库·c#·.netcore·entityframework
蓝桉8021 小时前
图片爬取案例
开发语言·数据库·python
逸狼1 小时前
【JavaEE进阶】Spring DI
java·开发语言
yonuyeung1 小时前
代码随想录算法【Day54】
java·数据结构·算法
Ljw...1 小时前
DeepSeek+Kimi生成高质量PPT
数据库·c++·powerpoint·ppt·deepseek