# Doppeleinträge in Access auf anderem Weg verhindern.



## Guest (26. Mai 2007)

Hallo liebe Gemeinde,

derzeit vermeide ich folgendermaßen Doppeleinträge in einer Kundentabelle:

1. Ich lese *NEUE* Kundendaten aus einem Excelsheet in eine Arraylist
2. Anschließend lese ich aus der Datenbank *ALLE *schon *BESTEHENDEN* Kundendaten aus und füge Sie der *gleichen* Arrayliste dazu
3. Dann lösche ich alle Daten aus der Datenbank
4. Dann entferne ich in der Arraylist doppelte Einträge
5. Abschliessend schreibe ich wieder alles zurück in die Datenbank

Das entspricht sicher nicht einer optimalen Vorgehensweise und deshalb suche ich eine Alternative, die etwas weniger
Zeitraubend ist. Was ich nicht verwenden möchte ist ein HASHSET. Aus welchem Grund auch immer.

Die Datenbank ist in ACCESS gemacht. Als Primary Key ist die Kundennummer festgelegt.
Eigentlich könnte ich doch schon dadurch doppeleinträge vermeiden. Aber wie fange ich den Fehler
ab der gemeldet wird, wenn Java versucht schon eine bestehende Kundennummer in die Datenbank einzutragen, ohne
das das Programm aufhört weiter zu laufen?

Es wäre gut wenn beim auslesen der Arraylist dieser Eintrag in so einem Fall einfach übersprungen würde und fortgesetzt wird. Wie erreiche ich das? Ist das möglich? Wenn ja, kann ich mir ne menge Arbeit sparen....

Vielen lieben Dank für Eure Antworten!

Tom!


----------



## semi (26. Mai 2007)

- Alle Kundennummern aus der DB lesen
- Für jeden Kunden aus Excel, desse Kundennummer nicht in der eingelesenen Liste enthalten ist
(
   * Kunden anlegen/speichern
   * Kundennummer in die Liste der Kundennumern eintragen   
)
Alle anderen werden überlesen.


----------



## Guest (26. Mai 2007)

Also entweder habe ich es falsch verstanden oder es ist der gleiche Aufwand:

Auf diesem Weg muss ich ebenfalls alle Daten aus der DB holen und mit denen aus dem Excel vergleichen.
Das will ich ja verhindern.

Gibt es einen Weg NUR das Excel zu lesen und zu versuchen in die DB zu schreiben?
Aufgrund der Primary KEy eigenschaft sollte es ja dann nicht möglich sein doppeleinträge zu generieren.

Aber wie fange ich den Fehler ab, der bei dem Versuch entsteht eine vorhandene Kundennummer einzulesen?


----------



## semi (26. Mai 2007)

Anonymous hat gesagt.:
			
		

> Also entweder habe ich es falsch verstanden oder es ist der gleiche Aufwand:
> 
> Auf diesem Weg muss ich ebenfalls alle Daten aus der DB holen und mit denen aus dem Excel vergleichen.
> Das will ich ja verhindern.


Um wieviele Millionenen von Kunden geht es da?
Du musst nicht die kompletten Daten der Kunden auslesen, sondern nur die Kundennummern.
z.B.
	
	
	
	





```
SELECT DISTINCT k.kundennummer FROM Kunde k
```
Das ganze liest du nur einmal in eine Liste ein und prüfst für jeden Datensatz aus Excel, ob 
die Kundennummer bereits existiert.



			
				Anonymous hat gesagt.:
			
		

> Gibt es einen Weg NUR das Excel zu lesen und zu versuchen in die DB zu schreiben?
> Aufgrund der Primary KEy eigenschaft sollte es ja dann nicht möglich sein doppeleinträge zu generieren.
> 
> Aber wie fange ich den Fehler ab, der bei dem Versuch entsteht eine vorhandene Kundennummer einzulesen?


Schau dir die SQLException an. In der Exception ist SQLSTATE = S1000. Daran erkennst du den Fehler.
Die SQLState Codes kannst du irgendwo auf den Seiten von MS finden.

Du könntest es auch komplett in Excel lösen. Die Kundennummern aus der DB lesen (in Excel) und 
eine weitere Seite in Excel aufbauen, in der nur diejenigen Kunden auftauchen, deren Kundennummer
nicht in der DB vorhanden war.


----------



## Guest (27. Mai 2007)

Hallo Semi,

danke nochmals! Hab jetzt doch deine Lösung als Anregung genommen.

Funzt super (


----------

