Нет смысла делать два обхода клиента / сервера в вашем случае, поэтому вместо этого используйте один оператор:
INSERT INTO asset (type_id, purchase_price, purchased_at)
SELECT id, ?, ?
FROM cars.asset_type
WHERE asset_type.name = ?
Если вы действительно хотите вставить только последний идентификатор из вашего запроса SELECT
(как вы итерировали результат SELECT
и отбрасывали все остальные идентификаторы), используйте вместо этого этот запрос:
INSERT INTO asset (type_id, purchase_price, purchased_at)
SELECT id, ?, ?
FROM cars.asset_type
WHERE asset_type.name = ?
ORDER BY id DESC -- I guess? Specify your preferred ordering here
LIMIT 1
Или с кодом JDBC:
try (PreparedStatement s = connection.prepareStatement(
"INSERT INTO asset (type_id, purchase_price, purchased_at) " +
"SELECT id, ?, ? " +
"FROM cars.asset_type " +
"WHERE asset_type.name = ?")) {
s.setDouble(1, parseDouble(purchased.getText()));
s.setDate(2, Date.valueOf(purchased_at.getValue()));
s.setString(3, sellables.getValue());
}
Это использует PreparedStatement
, который предотвратит SQL-инъекцию и синтаксические ошибки, подобные той, что вы получаете. На данный момент, я действительно рекомендую вам прочитать эти темы!