JAVA, SQL, вставьте в без дубликатов
Я пытаюсь вставить в таблицу без дубликатов. Я использую SQL derbyclient
на Яве. Код не работает (ошибка с 'where not exists'
). Любая идея?
Connection connection = DriverManager.getConnection("jdbc:derby://localhost:1527/PetroleumDataStorageSystemDB;create=true");
PreparedStatement statement;
int i = 1;
int progress = 0;
for (Refuel refuelList1 : refuelList) {
progress = (i / refuelList.size()) * 100;
String sql = "INSERT INTO refuel (id_tank, time, fuel_volume, "
+ "refueling_speed) VALUES (?,?,?,?) "
+ "WHERE NOT EXISTS (SELECT * FROM refuel WHERE "
+ "id_tank = ? AND time = ? AND fuel_volume = ? AND "
+ "refueling_speed = ?)";
statement = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
statement.setInt(1, refuelList1.getTankID());
statement.setString(2, refuelList1.getTime());
statement.setDouble(3, refuelList1.getFuelVolume());
statement.setDouble(4, refuelList1.getRefuelingSpeed());
statement.execute();
i++;
}
3 ответа
Проблема в том, как вы строите свой запрос. Это не является действительным INSERT
syntaxis
Сначала попробуйте что-нибудь подобное на вашей базе данных с фиктивными значениями.
INSERT INTO refuel (id_tank, time, fuel_volume, refueling_speed)
SELECT ?, ?, ?, ?
FROM refuel
WHERE NOT EXISTS (SELECT
FROM refuel
WHERE
id_tank = ?
AND time = ?
AND fuel_volume = ?
AND refueling_speed = ?);
Вы не можете иметь WHERE
пункт после VALUES
список.
Посмотрите здесь для действительного дерби INSERT
Синтаксис оператора.
Попробуйте что-то вроде этого (обратите внимание на использование sysibm.sysdummy1
, что гарантирует, что вы можете вставить только одну запись максимум. Если вы поместите туда реальное имя таблицы, вы можете вставить несколько записей за раз. Осторожнее с этим.)
INSERT INTO refuel (id_tank, tank, fuel_volume, refueling_speed)
SELECT ?, ?, ?, ?
FROM sysibm.sysdummy1
WHERE NOT EXISTS (SELECT *
FROM refuel
WHERE id_tank = ?
AND time = ?
AND fuel_volume = ?
AND refueling_speed = ?)
Кроме того, как отмечено Davide Lorenzo MARINO
Убедитесь, что вы правильно установили все параметры привязки.
В вашем утверждении есть как минимум 8 вопросительных знаков.
Вы должны установить их все!
После этого вы можете проверить еще раз и посмотреть, есть ли другие ошибки.