使用 JDBC 将 List<Object> 作为变量添加到数据库
Adding List<Object> as a variable to database using JDBC
所以我正在尝试使用 JDBC 和文件中的 HSQLDB 添加到数据库中。我需要将 List<Object>
作为变量插入到数据库中。
这是 Java 对象的样子:
public class Plant {
private Long id;
private String plantName;
private List<PlantParts> plantParts;
...
}
public class PlantParts {
private String leaves;
private String pedicle;
private String petals;
...
}
在文件夹 resources
中,我有一个名为 insert_plant.sql
的文件,其中包含以下查询:
INSERT INTO PLANTS (id, plantname, plantparts)
VALUES (NEXT VALUE FOR sequence, ?, ?);
table 是这样生成的:
CREATE SEQUENCE sequence START WITH 1;
CREATE TABLE PLANTS (
id BIGINT NOT NULL PRIMARY KEY,
plantname VARCHAR(255) NOT NULL,
plantparts VARCHAR(255) NULL, //No idea what to put here
);
现在 Java 我称之为:
public static void insertIntoOrderTable(BasicDataSource basicDataSource, String plantname, List<PlantParts> plantparts) throws SQLException{
Connection conn = null;
PreparedStatement stmt = null;
try {
conn = basicDataSource.getConnection();
stmt = conn.prepareStatement(Util.readFileFromClasspath("insert_plant.sql"), new String[]{"id"});
stmt.setString(1, plantname);
stmt.setString(2, plantparts); //And no idea what to do here
stmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (stmt != null) {
stmt.close();
}
if (conn != null) {
conn.close();
}
}
请求通常以 JSON:
的形式出现
{ "id": 5,
"plantName": "awesome plant",
"plantParts":[
{"leaves":"green","pedicle":"yellow","petals":"many"},
{"leaves":"red","pedicle":"yellow","petals":"few"}
]
}
我的猜测是它们应该保存在单独的 table 中,但我该怎么做,当我需要获取对象时,我如何才能将其作为一个整体获取。
您的数据的 SQL 模型与 Java 的不同之处在于 Plant 和 PlantParts 对象的链接方式。在 Java 模型中,Plant 有一组 PlantParts 对象。在 SQL 模型中,PlantParts 对象引用 Plant 对象。
所以你需要这两个 table:
CREATE TABLE plants (
id BIGINT NOT NULL PRIMARY KEY,
plantname VARCHAR(255) NOT NULL,
);
CREATE TABLE plantparts (
id BIGINT NOT NULL PRIMARY KEY,
leaves VARCHAR(255) NOT NULL,
pedicles VARCHAR(255) NOT NULL,
petals VARCHAR(255) NOT NULL,
plantid BIGINT NOT NULL,
FOREIGN KEY (plantid) REFERENCES plants(id)
);
请注意,PlantParts 对象的 plants
table 中没有列。 JSON 对象中 PlantParts 的数据进入两行 plantparts table。这两行的 plantid 列将包含 Plant 对象的 ID,即 5。
所以我正在尝试使用 JDBC 和文件中的 HSQLDB 添加到数据库中。我需要将 List<Object>
作为变量插入到数据库中。
这是 Java 对象的样子:
public class Plant {
private Long id;
private String plantName;
private List<PlantParts> plantParts;
...
}
public class PlantParts {
private String leaves;
private String pedicle;
private String petals;
...
}
在文件夹 resources
中,我有一个名为 insert_plant.sql
的文件,其中包含以下查询:
INSERT INTO PLANTS (id, plantname, plantparts)
VALUES (NEXT VALUE FOR sequence, ?, ?);
table 是这样生成的:
CREATE SEQUENCE sequence START WITH 1;
CREATE TABLE PLANTS (
id BIGINT NOT NULL PRIMARY KEY,
plantname VARCHAR(255) NOT NULL,
plantparts VARCHAR(255) NULL, //No idea what to put here
);
现在 Java 我称之为:
public static void insertIntoOrderTable(BasicDataSource basicDataSource, String plantname, List<PlantParts> plantparts) throws SQLException{
Connection conn = null;
PreparedStatement stmt = null;
try {
conn = basicDataSource.getConnection();
stmt = conn.prepareStatement(Util.readFileFromClasspath("insert_plant.sql"), new String[]{"id"});
stmt.setString(1, plantname);
stmt.setString(2, plantparts); //And no idea what to do here
stmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (stmt != null) {
stmt.close();
}
if (conn != null) {
conn.close();
}
}
请求通常以 JSON:
的形式出现 { "id": 5,
"plantName": "awesome plant",
"plantParts":[
{"leaves":"green","pedicle":"yellow","petals":"many"},
{"leaves":"red","pedicle":"yellow","petals":"few"}
]
}
我的猜测是它们应该保存在单独的 table 中,但我该怎么做,当我需要获取对象时,我如何才能将其作为一个整体获取。
您的数据的 SQL 模型与 Java 的不同之处在于 Plant 和 PlantParts 对象的链接方式。在 Java 模型中,Plant 有一组 PlantParts 对象。在 SQL 模型中,PlantParts 对象引用 Plant 对象。
所以你需要这两个 table:
CREATE TABLE plants (
id BIGINT NOT NULL PRIMARY KEY,
plantname VARCHAR(255) NOT NULL,
);
CREATE TABLE plantparts (
id BIGINT NOT NULL PRIMARY KEY,
leaves VARCHAR(255) NOT NULL,
pedicles VARCHAR(255) NOT NULL,
petals VARCHAR(255) NOT NULL,
plantid BIGINT NOT NULL,
FOREIGN KEY (plantid) REFERENCES plants(id)
);
请注意,PlantParts 对象的 plants
table 中没有列。 JSON 对象中 PlantParts 的数据进入两行 plantparts table。这两行的 plantid 列将包含 Plant 对象的 ID,即 5。