Derby - Derby 服务器(Derby 概述、Derby 服务器下载与启动、Derby 连接数据库与创建数据表、Derby 数据库操作)
一、Derby 概述
-
Derby 是一种轻量级、嵌入式数据库,适用于开发、测试或小型应用
-
Derby 是使用 Java 编写的,可以无缝集成到 Java 应用中
-
Derby 支持嵌入式模式与网络服务器模式,在嵌入式模式下,Derby 与应用程序运行在同一 JVM 中,数据库文件存储在本地目录
-
在网络服务器模式下,Derby 作为独立数据库服务运行
二、Derby 服务器
- 下载 Derby 服务器:
https://db.apache.org/derby/
- 启动 Derby 服务器:在 Windows 系统上,运行 Derby 根目录下的 bin 目录下的
startNetworkServer.bat
- 开发前准备,在 pom.xml 文件中添加相关依赖
<dependency><groupId>org.apache.derby</groupId><artifactId>derbyclient</artifactId><version>10.14.2.0</version>
</dependency>
三、Derby 连接数据库与创建数据表
1、连接数据库
String dbURL = "jdbc:derby://localhost:1527/mydb;create=true";try (Connection connection = DriverManager.getConnection(dbURL)) {System.out.println("连接 Derby 成功");
} catch (SQLException e) {e.printStackTrace();
}
-
create=true表示如果数据库不存在,则创建它,如果数据库已存在,则直接连接到它 -
第一次执行时,Derby 会创建一个新的数据库,输出结果如下
连接 Derby 成功
2、创建数据表
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")) { // 表已存在时的 SQLStateSystem.out.println("表 users 已存在");} else {System.out.println("创建表失败,错误信息:" + e.getMessage());}
}
- 第一次执行时,会创建表 users,输出结果如下
创建表 users 成功
- 第二次执行时,表 users 已存在,抛出异常,输出结果如下
表 users 已存在
四、Derby 数据库操作
1、插入数据
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());
}
- 第一次执行时,会插入数据成功,输出结果如下
插入数据成功
- 第二次执行时,主键冲突,会抛出异常,输出结果如下
插入数据失败,错误信息:语句已中止,因为它导致“USERS”上所定义的“SQL0000000000-80220011-019a-2efb-15b9-00000f200000”标识的唯一或主键约束条件或唯一索引中出现重复键值。
2、查询数据
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、更新数据
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、删除数据
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());
}
- 输出结果如下
删除数据成功
