因此,我尝试使用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, ?, ?);
并且表是用这个生成的:
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"}
]
}
我的猜测是它们应该保存在单独的表中,但是我该怎么办?当我需要获取该对象时,又该如何整体上获取它。
答案 0 :(得分:1)
数据的SQL模型与Java和Java的不同之处在于如何将Plant和PlantParts对象链接在一起。在Java模型中,Plant具有PlantParts对象的集合。在SQL模型中,PlantParts对象引用Plant对象。
因此您需要以下两个表:
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)
);
请注意,plants
表中没有PlantParts对象的列。 JSON对象中PlantParts的数据进入plantparts表的两行。这两个行的plantid列都将包含Plant对象的ID,即5。