Добавление списка <Object>в качестве переменной в базу данных с использованием JDBC - PullRequest
0 голосов
/ 15 октября 2018

Поэтому я пытаюсь добавить в базу данных, используя 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"}
     ]
   }

Я предполагаю, что они должны храниться в отдельных таблицах, но как я могу это сделать и когда мне нужно получить объекттогда как я мог получить это в целом.

1 Ответ

0 голосов
/ 16 октября 2018

Модель ваших данных в SQL будет отличаться от 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.Данные для PlantParts в вашем объекте JSON помещаются в две строки таблицы Plantparts.Столбец plantid обеих этих строк будет содержать идентификатор объекта Plant, который равен 5.

...