У меня есть такой запрос:
insert into tasks (task_id, author, header, description, create_time)
values (default, (?), (?), (?), now()::timestamp)
Который я отправляю через JDBC Driver вот так:
public void addItem(final Item item) throws SQLException {
// Так я генерирую запрос приведенный выше.
final String requestPattern = this.requests.generate("add_item");
if (item == null) throw new IllegalArgumentException();
try (final PreparedStatement statement =
this.connection.get()
.prepareStatement(requestPattern)) {
// First position = author.
statement.setString(1, item.getNameUser());
// Second position = header.
statement.setString(2, item.getHeader());
// Treed position = description.
statement.setString(3, item.getDescription());
statement.executeUpdate();
}
}
И как говориться, все бы было ничего еслиб знала от кого. Когда я выполняю этот запрос я не знаю какой id
присвоит postgres моему кортежу. Я знаю что можно как-то получить это значение прямо в рамках запроса на добавление. Но как? и как мне через JDBC драйвер его принять из моего statement
?
Помогите пожалуйста.
После выполнения запроса, надо запросить сгенерированные ключи:
statement.executeUpdate();
ResultSet rs = statement.getGeneratedKeys();
if (rs.next()) {
id = rs.getLong(1); //вставленный ключ
}
Update
Как верно заметил @Regent запрос надо выполнять с флагом Statement.RETURN_GENERATED_KEYS
statement.executeUpdate(sql, Statement.RETURN_GENERATED_KEYS);
или
PreparedStatement statement = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Вообщем проблема такая, есть TabLayout и ViewPager, всего вкладок у меня 5, на первых двух вкладках идет RecyclerView с данными, а на 3 избранные, по началу...