#java #postgresql #jooq #jooq-codegen-maven
#java #postgresql #jooq #jooq-codegen-maven
Вопрос:
Я пытаюсь вставить в таблицу books с помощью jooq в java. таблица books содержит два столбца book_id integer, jsonb_column jsonb. Однако окончательный запрос сформирован неверно. Значения для jsonb не заполняются. Это мой сформированный запрос.
insert into book (book_id, jsoncolumn) values (902, );
Ниже приведен мой java-код.
Field[] columnNames= new Field[2];
columnNames[0]=field("book_id");
columnNames[1]= field("jsoncolumn");
Field[] columnValues= new Field[2];
columnValues[0]=field("902");
columnValues[1]=field("{}");
Query query= create.insertInto(table("book"),
columnNames)
.values(columnValues);
String sql = query.getSQL();
System.out.println(sql);
Как это сделать?
Ответ №1:
Если вы использовали генератор кода (который я настоятельно рекомендую!), То большая часть jOOQ работает из коробки. Ваш запрос будет просто читать:
ctx.insertInto(BOOK, BOOK.BOOK_ID, BOOK.JSONCOLUMN)
.values(902, JSONB.jsonb("{}"))
.execute();
Если по какой-то причине вы не можете использовать генератор кода, вам придется делать то, что генератор кода делает за вас, вручную. Вот ошибки, которые вы допустили:
- Вы не указали типы данных для своих выражений полей
- Вы использовали простые шаблоны SQL для определения значений ваших столбцов, а не привязки значений
Вот исправленная версия вашего кода:
Table<?> book = table(name("book"));
Field<Long> bookId = field(name("book_id"), SQLDataType.BIGINT);
Field<JSONB> jsoncolumn = field(name("jsoncolumn"), SQLDataType.JSONB);
ctx.insertInto(book, bookId, jsoncolumn)
.values(902L, JSONB.jsonb("{}"))
.execute();
Комментарии:
1. что именно такое BOO, BOOK.BOOK_ID … это строка? также это приводит к ошибке компиляции JSONB.jsonb
2. кроме того, исправленная версия кода также выдает ошибку компиляции для меня в JSONB.jsonb. это то, что я пытаюсь сделать org.jooq.JSONB.jsonb(«{}»)
3. @Abhishek: «что именно такое BOO, BOOK.BOOK_ID» — Ну, я рекомендовал использовать генератор кода, так что это сгенерированный код. Смотрите Примеры здесь . Серьезно. Используйте генератор кода, если можете (т. Е. Если ваша схема не является динамической). У вас будет гораздо лучший опыт работы с jOOQ, а не просто хороший. 🙂 » также это выдает мне ошибку компиляции JSONB.jsonb » — я предполагаю, что вы используете последнюю версию jOOQ. В противном случае используйте
JSONB.valueOf()
, который делает то же самое.