# Prepared Statements und Sets



## Timo Frenzel (1. Nov 2012)

Guten Tag Leute,
bin neu und lege gleich einmal los^^

Ich muss einige zig Hunderttausend Einträge in die mysql db füllen,
dabei kommt es aber oft vor, das die Datensätze die gleichen sind.
Somit müsste ich dann teilweise 40.000 überflüssige Einträge pro Stream machen; was ich verhindern möchte.

Also, ich bekomme jede Datenzeile als Stream. Aus dieser Zeile werden 5 Inserts gebastelt.

Aufgrund der Datenmenge hatte ich mich für PS entschieden.
Nun da ich weiß, das ich überflüssige Inserts habe, hole ich mir aus den PS per tostring() den erzeugten String, speicher diesen in einem Hashset und erhalte also pro Datei nur Uniques.
Diese muss ich nun aber als statement behandeln.

Ich suche nun nach einer Möglichkeit, zb die PS in einem SET zu speichern und diesen dann einfach zu executen.
Hat da einer vielleicht eine Idee?


Timo


----------



## tfa (1. Nov 2012)

Ich würde verhindern, dass überhaupt doppelte Datensätze auftreten - also die überflüssigen vorher rausfiltern. Wo kommen die Daten denn her?


----------



## nillehammer (1. Nov 2012)

Ich bin mir nicht sicher, ob man PreparedStatement überhaupt vernünftig in Sets speichern kann. Habe es mir zwar nicht angeschaut würde aber vermuten, dass equals() und hashCode() dieser Klasse das garnicht hergeben.

Wenn Du die Datenzeilen als Stream bekommst, kannst Du diese nicht in ein Set<String> stecken und erst danach die PS erzeugen?


----------



## Timo Frenzel (2. Nov 2012)

Guten Morgen...

ok, stimmt.

Habe nun versucht es erst zu filtern und dann die PS zu bilden.

Hab jetzt aber wohl n verständnis Problem.


```
HashSet set = new HashSet();
set.add("Hallo");
set.add("Welt!");
set.add("Welt!"); // Wird nicht nochmal hinzugefügt!
```


Ich habe es nun so versucht:


```
HashSet set = new HashSet();
set.add(String1[]);
set.add(String2[]);
set.add(String2[]); /[B]/ Wird nochmal hinzugefügt![/B]
```


Hatte gehofft, das wenn die Inhalte des StringArrays nun gleich sind, also meine Datensätze für PS gleich sind, das wie bei den Strings diese nur einmal hinzugefügt werden.

Einer eine Idee wie ich aus diesem Dilemma heraus komme?;(


Ich versuche es mal statt mit einem StringArray mit einer ArrayList

Timo


----------



## Timo Frenzel (2. Nov 2012)

super, so hats geklappt


----------



## nillehammer (2. Nov 2012)

Ist zwar schon erledigt, nur noch kurz der Hinweis zu Arrays und equals(). Arrays sind auch Objekte und sogar eigene "Klassen". In dem Fall hier String[].class. Die equals-Methode ist nicht überschrieben. D.h. es werden nicht (wie erwartet) die Elemente des Arrays auf Gleichheit verglichen. Dafür gibt es aber eine Hilfsklasse/-methode im JDK:

```
java.util.Arrays.equals(array1,array2);
```


----------

