【问题标题】:JAVA, SQL, insert into no-duplicatesJAVA,SQL,插入无重复项
【发布时间】:2015-12-19 16:01:10
【问题描述】:

我正在尝试插入没有重复的表格。我在 Java 中使用 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++;
}

【问题讨论】:

  • 我认为 ID 是唯一的?如果是这种情况,那么将其从您不存在的地方删除,因为它会有所不同?
  • 玻璃鱼。该表没有主键。
  • 插入 + where 不正确。请改用插入 + 选择。

标签: java sql derby insert-into no-duplicates


【解决方案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 = ?);

【讨论】:

    【解决方案2】:

    您的陈述中至少有 8 个问号。

    你必须全部设置!

    之后你可以再次检查,看看是否还有其他错误。

    【讨论】:

    • 如果您发现答案正确且有用,您可以点赞并用绿旗将其标记为正确答案。谢谢!
    【解决方案3】:

    WHERE 列表后面不能有 WHERE 子句。

    查看here 以了解有效的 Derby 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 所述,请确保正确设置所有绑定参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-02
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-23
      • 2022-01-02
      • 1970-01-01
      相关资源
      最近更新 更多