gpt4 book ai didi

java - 如何使用 WHERE 子句过滤掉重复数据,而不需要硬编码?

转载 作者:太空宇宙 更新时间:2023-11-04 12:26:10 24 4
gpt4 key购买 nike

我已经为此好几天了,在网上到处搜索,但还没有找到正确的答案

我的问题描述,我需要从传入的 .csv 文件中过滤重复数据,检查该数据是否已在表中,如果没有,则保留数据,否则不插入数据。我的方法是,我逐行读取一个唯一的 .csv 文件,我使用一个准备好的语句,该语句假设使用 WHERE 子句来检查重复项。

我遇到问题的部分是如何在准备好的语句中使用 WHERE 子句。

下面是我的一些代码,以消除任何困惑。

PS:这就是 ,message_id 的样子 <329577443.1427052727657.JavaMail.javamailuser@localhost> 有数千个。

try { 
dataRow = reader.readLine();
while ((dataRow = reader.readLine()) != null) {
totalRecordsProcessed++;
dataRow = dataRow.replace("\"", "");
dataRow = dataRow.replace("<", "");
dataRow = dataRow.replace(">", "");
dataItems = dataRow.split(",", -1);
ExchangeReport exchangeReport = new ExchangeReport(dataItems);
//System.out.println(exchangeReport.toString());
persistData(exchangeReport);
}
}

//在插入方法中检查我们是否保留了重复数据 public void persistData(ExchangeReport ExchangeReport) 抛出 SQLException{

    Connection connection = super.getEnvironment().getConnection();   
PreparedStatement preparedStatement = null;
String insertScript = null;
String skipScript = null;

//ResultSet incomeSet;
ArrayList<String> rowVals = new ArrayList();

ArrayList<String> dbList = new ArrayList<String>();
ArrayList<String> incomeList = new ArrayList<String>();

String tempVal = null;


skipScript = "select unique_ref, message_id, event_id from InboundCorres " +
"where message_id = " +
"";
preparedStatement = connection.prepareStatement(skipScript);
ResultSet dbSet = preparedStatement.executeQuery();
while (dbSet.next()) {
rowVals.add(dbSet.getString(1).trim());
rowVals.add(dbSet.getString(2).trim());
rowVals.add(dbSet.getString(3).trim());
System.out.println(rowVals.toString());
}


//List<String> incomeList = Arrays.asList(dataItems);

insertScript = "INSERT INTO INBOUNDCORRES(EVENT_ID, SOURCE_INBOUND, TIME_STAMP," +
"RECIPIENTS, MESSAGE_SUBJECT, SENDER, MESSAGE_ID," +
"CONNECTOR_ID, UNIQUE_REF)" +
"VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)";
preparedStatement = connection.prepareStatement(insertScript);
preparedStatement.setString(1, exchangeReport.getEventId() );
preparedStatement.setString(2, exchangeReport.getSourceInbound() );
preparedStatement.setString(3, exchangeReport.getTimeStamp() );
preparedStatement.setString(4, exchangeReport.getRecipient());
preparedStatement.setString(5, exchangeReport.getMessageSubject());
preparedStatement.setString(6, exchangeReport.getSender());
preparedStatement.setString(7, exchangeReport.getMessageId());
preparedStatement.setString(8, exchangeReport.getConnectorId());
preparedStatement.setString(9, exchangeReport.getUniqueRef());
preparedStatement.executeUpdate();

}

最佳答案

skipScript 中的 SQL 语句不完整。

我希望看到类似的内容:

skipScript = "从 InboundCorres 中选择 unique_ref、message_id、event_id "+ “其中 message_id = :msg_id”;

所以message_id是列名,msg_id是一个本地字符串变量来保存我们要查找的值。

要获取 msg_id 中的值,我们可以调用名为 saveMessage() 的方法,该方法如下所示:

public void saveMessage (final String messageId) {
Map<String, Object> values = new HashMap<String, Object>();
values.put("msg_id", messageId);
jdbcTemplate.update(skipScript , values);
}

请注意,我特意为 message_id 使用了三个不同的名称,以明确发生了什么。

希望这有帮助。我意识到我的示例使用了 jdbcTemplate.update() ,它与代码示例不同,但原理相似。

关于java - 如何使用 WHERE 子句过滤掉重复数据,而不需要硬编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38370863/

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