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

    删除数据成功

相关推荐
星空11 小时前
WordPress在docker中部署
运维·docker·容器
李广坤11 小时前
Agent 记忆系统详解:从"金鱼脑"到"过目不忘"的进化之路
后端
做萤石二次开发的哈哈11 小时前
萤石蓝海AIoT一站式工作台计费说明
网络·数据库·萤石开放平台·蓝海aiot一站式工作台
竹枝溪11 小时前
MySQL数据库零基础入门
数据库·sql·mysql·navicat·ddl·dml·dql
XWalnut11 小时前
LeetCode刷题 day37
java·数据结构·算法·leetcode
万山寒11 小时前
python依赖包导出离线安装到没有外网的服务器
服务器·开发语言·python
huaweichenai11 小时前
使用maven搭建sprint-boot
java·maven·sprint
龙仔72511 小时前
人大金仓Kingbase V8 自动全量备份部署完整笔记
数据库·笔记·备份·人大金仓
王志来1379447300811 小时前
从选型到交付,工控服务器机箱一站式采购平台匀天如何实现服务闭环?
数据库
zerozrc011 小时前
Java 方法调用的底层原理
java·后端