0

重複のないテーブルに挿入しようとしています。derbyclientJavaでSQLを使用しています。コードが機能していません ( のエラー'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++;
}
4

3 に答える 3

1

問題は、クエリを作成する方法です。それは有効なINSERT構文ではありません

最初にダミー値を使用して、データベースでこのようなことを試してください。

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 = ?);
于 2015-09-22T15:31:45.060 に答える
0

あなたの発言には少なくとも 8 つのクエスチョン マークがあります。

あなたはそれらすべてを設定する必要があります!

その後、もう一度チェックして、他のエラーがあるかどうかを確認できます。

于 2015-09-22T15:34:55.733 に答える
0

リストのWHERE後に句を入れることはできません。VALUES

有効な Derbyステートメントの構文については、こちらを参照してください。INSERT

代わりに、次のようなことを試してください ( の使用に注意してsysibm.sysdummy1ください。これにより、最大で 1 つのレコードのみを挿入することが保証されます。実際のテーブル名をそこに入れると、一度に複数のレコードを挿入する可能性があります。注意してください。):

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、すべてのバインド パラメータを正しく設定していることを確認してください。

于 2015-09-22T15:41:52.527 に答える