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());
}
  • 输出结果如下

    删除数据成功

相关推荐
学长毕业设计2 小时前
基于SpringBoot的公益基金管理系统(源码+文档+讲解视频)
java·spring boot·后端
Brilliantwxx2 小时前
【Linux】 进程(9)程序与进程地址空间(基础+进阶+面试题)
linux·运维·服务器·开发语言·c++
东小西3 小时前
【SAA实战】第 3 篇 · 工具调用全攻略:把业务能力交给 Agent 自己调度
java·后端·spring
东小西3 小时前
【SAA实战】第 4 篇 · Agent 短期记忆:saver 让 Agent 跨轮记得住(threadId 隔离)
java·后端·spring
oradh3 小时前
Oracle TX 锁 Mode 4(Share)问题排查总结
数据库·oracle·tx 锁 mode 4·oracle tx 锁
许彰午3 小时前
22-DataCenter报文序列化
java·低代码·架构·状态模式
不怕犯错,就怕不做3 小时前
git prune 自动删除本地记录中那些远程已经不存在的分支引用
linux·服务器·git
2601_962065253 小时前
[MySQL] SQL优化之性能分析
java·sql·mysql
yi.Ist3 小时前
数据定义语言-DDL操作
数据库·学习·mysql·oracle·大海豚
阿kun要赚马内3 小时前
MySQL 索引基础
后端·mysql