gpt4 book ai didi

java - 在查询中使用不同关键字的重复条目

转载 作者:行者123 更新时间:2023-11-30 06:55:59 25 4
gpt4 key购买 nike

我正在使用 java 执行一些 SQL 查询。其中一些是从一个数据库(A)获取数据并存储在另一个数据库(B)的表中。处理完成后,我将从数据库(B)的表中删除所有数据。我每 5 分钟重复一次这个过程。代码:

         String sql = "delete from newtable";
stmt5 = conn.prepareStatement(sql);
stmt5.executeUpdate(sql);
String sql_1 = "select distinct tbl_alm_log_2000000000.Csn, tbl_alm_log_2000000000.IsCleared, tbl_alm_log_2000000000.Id,tbl_alm_log_2000000000.NEType, tbl_alm_log_2000000000.OccurTime, tbl_alm_log_2000000000.hostIP, tbl_alm_log_2000000000.ExtendInfo From fmdb.dbo.tbl_alm_log_2000000000 Where IsCleared = 0";

ResultSet rs = stmt_1.executeQuery(sql_1);



String sql_2 = "insert into newtable (CSN, IsCleared, Id, NEType, OccurTime, hostIP) values(?,?,?,?,?,?)";


conn.setAutoCommit(false);
PreparedStatement ps = conn.prepareStatement(sql_2);

final int batchSize = 1000;
int count = 0;

while (rs.next()){
ps.setString(1, rs.getString(1)); //csn
ps.setString(2, rs.getString(2)); //iscleared
ps.setString(3, rs.getString(3));//id
ps.setString(4, rs.getString(4));//netype
ps.setString(5, rs.getString(5));//occurtime
ps.setString(6, rs.getString(6));//hostip


ps.addBatch();

if(++count % batchSize == 0) {
ps.executeBatch();
}
}
ps.executeBatch(); // insert remaining records
conn.commit();
ps.close();

它完美运行 10 -20 次,然后给出“Csn 中“值”的重复输入错误,因为它是主键”。我在查询中添加了 Distinct 关键字,但运行 10-20 次后仍然出现此错误。

注意:我在进程开始之前从 newtable 中删除数据,因此它总是添加到空表中。

建议我哪里出错了。

最佳答案

看来您对 distinct 的工作原理存在误解。在具有多个选定列的查询中,它将搜索不同的值元组,而不是仅搜索不同的 Csn 列。

有多种方法可以仅通过一列选择不同的值。它通常取决于您使用的特定 DBMS 以及您想要应用于为相同 Csn 列值找到的乘法元组的逻辑。例如考虑这个问题:DISTINCT for only one Column

一般想法之一:仅为 Csn 列选择不同的单个值,然后迭代此列表并选择具有此 Csn 值的第一个值元组(我不这样做)不知道它是否适合您选择第一个元组)。

关于java - 在查询中使用不同关键字的重复条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41806078/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com