【发布时间】:2016-07-14 09:46:04
【问题描述】:
我已经坐了好几天了,在网上到处搜索,但没有找到合适的答案
我的问题描述,我需要从传入的 .csv 文件中过滤重复数据,检查该数据是否已经在表中,如果没有,则保留数据,否则不要插入数据。我的方法,我逐行读取一个唯一的 .csv 文件,我使用一个preparedStatement,假设使用 WHERE 子句来检查重复项。
我遇到的问题是,如何在preparedStatement 中使用WHERE 子句。
以下是我的一些代码,以消除任何混淆。
PS:这就是 ,message_id 的样子 有数千个。
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);
}
}
//在insert方法中检查一下我们是否持久化了重复数据 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();
}
【问题讨论】:
-
这个语句在做什么(尤其是 where 子句)?
skipScript = "select unique_ref, message_id, event_id from InboundCorres " + "where message_id = " + ""; -
使用不同的关键字
-
该语句应该进行实际的重复检查,然后跳过重复插入到表中。请注意,message_id 列将始终有 2 个相同的 message_id,一个用于接收,另一个用于传递。