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

    删除数据成功

相关推荐
毅航28 分钟前
自然语言处理发展史:从规则、统计到深度学习
人工智能·后端
JxWang0538 分钟前
Task04:字符串
后端
树獭叔叔1 小时前
10-让模型更小更聪明,学而不忘:知识蒸馏与持续学习
后端·aigc·openai
JxWang051 小时前
Task02:链表
后端
只会cv的前端攻城狮2 小时前
Elpis-Core — 融合 Koa 洋葱圈模型实现服务端引擎
前端·后端
codetown2 小时前
2026年Zig编程语言权威指南:从系统级底层架构到现代软件工程实践
后端·程序员
cg334 小时前
cc-connect,十分钟帮你把 claude code 连接到微信,飞书,钉钉等等平台
后端·openai
用户1427868669324 小时前
Java多态的底层真相:JVM到底怎么知道该调哪个方法?(面试高频)
后端
初次攀爬者4 小时前
RabbitMQ的消息模式和高级特性
后端·消息队列·rabbitmq
摸鱼的春哥4 小时前
惊!黑客靠AI把墨西哥政府打穿了,海量数据被黑
前端·javascript·后端