在Oracle数据库中,可以使用序列(Sequence)来生成唯一的主键。下面是一个示例代码,展示了如何保存两个相关实体,并使用序列生成主键:
CREATE SEQUENCE entity_sequence
START WITH 1
INCREMENT BY 1
NOCACHE
NOCYCLE;
CREATE TABLE entity1 (
id NUMBER,
name VARCHAR2(50),
CONSTRAINT entity1_pk PRIMARY KEY (id)
);
CREATE TABLE entity2 (
id NUMBER,
entity1_id NUMBER,
name VARCHAR2(50),
CONSTRAINT entity2_pk PRIMARY KEY (id),
CONSTRAINT entity2_fk FOREIGN KEY (entity1_id) REFERENCES entity1(id)
);
import java.sql.*;
public class Main {
public static void main(String[] args) {
// 数据库连接信息
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String username = "your_username";
String password = "your_password";
// 实体信息
String entity1Name = "Entity1";
String entity2Name = "Entity2";
// 建立数据库连接
try (Connection conn = DriverManager.getConnection(url, username, password)) {
// 开启事务
conn.setAutoCommit(false);
// 保存实体1
int entity1Id = saveEntity(conn, entity1Name);
// 保存实体2
saveEntity(conn, entity2Name, entity1Id);
// 提交事务
conn.commit();
System.out.println("保存成功!");
} catch (SQLException e) {
e.printStackTrace();
}
}
// 保存实体1
private static int saveEntity(Connection conn, String name) throws SQLException {
String sql = "INSERT INTO entity1 (id, name) VALUES (entity_sequence.nextval, ?)";
try (PreparedStatement stmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)) {
stmt.setString(1, name);
stmt.executeUpdate();
// 获取生成的主键值
try (ResultSet rs = stmt.getGeneratedKeys()) {
if (rs.next()) {
return rs.getInt(1);
} else {
throw new SQLException("无法获取生成的主键值!");
}
}
}
}
// 保存实体2
private static void saveEntity(Connection conn, String name, int entity1Id) throws SQLException {
String sql = "INSERT INTO entity2 (id, entity1_id, name) VALUES (entity_sequence.nextval, ?, ?)";
try (PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setInt(1, entity1Id);
stmt.setString(2, name);
stmt.executeUpdate();
}
}
}
请注意替换代码中的数据库连接信息和实体信息,以适应您的环境。
上一篇:保存两个点云