Apache Derby的使用

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

一、使用IDEA创建Maven项目

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

二、添加依赖

<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

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类

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类中新增查询方法

@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类中新增添加方法

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

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

七、更新数据

在DatabaseTest类中新增更新方法

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

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

八、删除数据

在DatabaseTest类中新增删除方法

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

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

文章来源地址https://www.uudwc.com/A/20jq8/

原文地址:https://blog.csdn.net/m1729339749/article/details/133317680

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

h
上一篇 2023年10月19日 13:29
A. Trust Nobody
下一篇 2023年10月19日 14:59