Ich habe mit diesem für ein paar Tage gesessen, Online High-Low-Suche, aber habe keine richtige AntwortWie verwenden Sie eine WHERE-Klausel, um doppelte Daten herauszufiltern, ohne harte Codierung?
Meine Problembeschreibung, muss ich doppelte Daten aus einer eingehenden .csv-Datei, tun a Überprüfen Sie, ob diese Daten bereits in der Tabelle vorhanden sind, wenn sie dann keine Daten beibehalten, andernfalls fügen Sie keine Daten ein. Meine Methode, die ich in einer eindeutigen CSV-Datei Zeile für Zeile einlese, verwende ich eine preparedStatement, die die WHERE-Klausel verwenden soll, um die Duplikate zu überprüfen.
Der Teil, mit dem ich ein Problem habe, ist, wie man die WHERE-Klausel in meinem preparedStatement verwendet.
Im Folgenden finden Sie einige meiner Code, um jede Verwirrung zu klären.
PS: Das ist, was die Nachricht aussieht < [email protected]> es gibt Tausende von ihnen.
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);
}
}
// Führt eine Überprüfung in der insert-Methode, um zu sehen, ob wir doppelte Daten public void persistData sind persistierende (ExchangeReport exchangeReport) throws 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();
}
Was macht diese Anweisung (vor allem where-Klausel)? 'skipScript =" select unique_ref, message_id, ereignis_id von InboundCorres "+ " wo message_id = "+ " "; – SMA
Verwenden Sie das eindeutige Schlüsselwort –
Die Anweisung sollte die tatsächliche Duplizierungsprüfung durchführen und dann das Einfügen von Duplikaten in die Tabelle überspringen. Beachten Sie, dass die Spalte "message_id" immer zwei gleiche Nachrichten enthält, nämlich eine Nachricht für empfangen und eine andere für die Zustellung. – ReiClay