Derby - Derby 服务器(Derby 概述、Derby 服务器下载与启动、Derby 连接数据库与创建数据表、Derby 数据库操作)

一、Derby 概述

  1. Derby 是一种轻量级、嵌入式数据库,适用于开发、测试或小型应用

  2. Derby 是使用 Java 编写的,可以无缝集成到 Java 应用中

  3. Derby 支持嵌入式模式与网络服务器模式,在嵌入式模式下,Derby 与应用程序运行在同一 JVM 中,数据库文件存储在本地目录

  4. 在网络服务器模式下,Derby 作为独立数据库服务运行


二、Derby 服务器

  1. 下载 Derby 服务器:https://db.apache.org/derby/

  1. 启动 Derby 服务器:在 Windows 系统上,运行 Derby 根目录下的 bin 目录下的 startNetworkServer.bat
  • 开发前准备,在 pom.xml 文件中添加相关依赖
xml 复制代码
<dependency>
    <groupId>org.apache.derby</groupId>
    <artifactId>derbyclient</artifactId>
    <version>10.14.2.0</version>
</dependency>

三、Derby 连接数据库与创建数据表

1、连接数据库
java 复制代码
String dbURL = "jdbc:derby://localhost:1527/mydb;create=true";

try (Connection connection = DriverManager.getConnection(dbURL)) {
    System.out.println("连接 Derby 成功");
} catch (SQLException e) {
    e.printStackTrace();
}
  1. create=true 表示如果数据库不存在,则创建它,如果数据库已存在,则直接连接到它

  2. 第一次执行时,Derby 会创建一个新的数据库,输出结果如下

    连接 Derby 成功

2、创建数据表
java 复制代码
String createTableSQL = "CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(50))";
try (Statement statement = connection.createStatement()) {
    statement.execute(createTableSQL);
    System.out.println("创建表 users 成功");
} catch (SQLException e) {
    if (e.getSQLState().equals("X0Y32")) { // 表已存在时的 SQLState
        System.out.println("表 users 已存在");
    } else {
        System.out.println("创建表失败,错误信息:" + e.getMessage());
    }
}
  1. 第一次执行时,会创建表 users,输出结果如下

    创建表 users 成功

  2. 第二次执行时,表 users 已存在,抛出异常,输出结果如下

    表 users 已存在


四、Derby 数据库操作

1、插入数据
java 复制代码
String insertSQL = "INSERT INTO users (id, name) VALUES (?, ?)";

try (PreparedStatement preparedStatement = connection.prepareStatement(insertSQL)) {
    preparedStatement.setInt(1, 1);
    preparedStatement.setString(2, "Alice");
    preparedStatement.executeUpdate();
    System.out.println("插入数据成功");
} catch (SQLException e) {
    System.out.println("插入数据失败,错误信息:" + e.getMessage());
}
  1. 第一次执行时,会插入数据成功,输出结果如下

    插入数据成功

  2. 第二次执行时,主键冲突,会抛出异常,输出结果如下

    插入数据失败,错误信息:语句已中止,因为它导致"USERS"上所定义的"SQL0000000000-80220011-019a-2efb-15b9-00000f200000"标识的唯一或主键约束条件或唯一索引中出现重复键值。

2、查询数据
java 复制代码
String selectSQL = "SELECT id, name FROM users";

try (Statement statement = connection.createStatement();
        ResultSet resultSet = statement.executeQuery(selectSQL)) {
    while (resultSet.next()) {
        System.out.println("ID: " + resultSet.getInt("id") + ", Name: " + resultSet.getString("name"));
    }
}
  • 输出结果如下

    ID: 1, Name: Alice

3、更新数据
java 复制代码
String updateSQL = "UPDATE users SET name = ? WHERE id = ?";

try (PreparedStatement preparedStatement = connection.prepareStatement(updateSQL)) {
    preparedStatement.setString(1, "Bob");
    preparedStatement.setInt(2, 1);
    int rowsAffected = preparedStatement.executeUpdate();
    if (rowsAffected > 0) {
        System.out.println("更新数据成功");
    } else {
        System.out.println("更新数据失败,未找到匹配的记录");
    }
} catch (SQLException e) {
    System.out.println("更新数据失败,错误信息:" + e.getMessage());
}
  • 输出结果如下

    更新数据成功

4、删除数据
java 复制代码
String deleteSQL = "DELETE FROM users WHERE id = ?";

try (PreparedStatement preparedStatement = connection.prepareStatement(deleteSQL)) {
    preparedStatement.setInt(1, 1);
    int rowsAffected = preparedStatement.executeUpdate();
    if (rowsAffected > 0) {
        System.out.println("删除数据成功");
    } else {
        System.out.println("删除数据失败,未找到匹配的记录");
    }
} catch (SQLException e) {
    System.out.println("删除数据失败,错误信息:" + e.getMessage());
}
  • 输出结果如下

    删除数据成功

相关推荐
KIDULT°14 小时前
MySQL系列 (1):数据库原理
运维·数据库·mysql·云计算
我不是程序员三三14 小时前
透明加密软件偶发解密异常排错实录:文件时能打开时乱码
数据库·域智盾
snhna14 小时前
向量数据库深度实战:从 HNSW 到 pgvector、Milvus 选型与 RAG 落地
数据库·人工智能·python·postgresql·milvus
架构技术专栏14 小时前
Agent 工具调用:从工具声明到执行反馈
前端·人工智能·后端
天行健,君子而铎15 小时前
数据分类分级的范式转换:从规则匹配到场景化高准确率一键部署
网络·数据库·安全
别动我齐刘海15 小时前
C++ 工程化学习
java·linux·前端·c++·学习·机器学习·机器人
码事漫谈15 小时前
你让AI干的活,它可能只干了十分之一——而你根本看不出来
后端
牛战士coding15 小时前
MySQL 读写分离完整链路:主从复制、多数据源与 @DS 路由
数据库·mysql
Wx-bishekaifayuan15 小时前
express皖美特色农产品网售系统53118-计算机课程设计、毕业设计
人工智能·spring boot·后端·python·课程设计·express·旅游
Wx-bishekaifayuan16 小时前
springboot汉中旅游服务平台41442-计算机课程设计、毕业设计
spring boot·后端·python·django·课程设计·express·旅游