# primaryKey auslesen -  Datensätze abgleichen



## Einklang. (1. Jan 2013)

Hallo,

so erstmal ein frohes neues Jahr ;-)!

Dann zu weniger erfreulichem: Schreibe Datensätze von einer Datenbank auf einem Server in eine lokale Datenbank. Funktioniert mittlerweile, doch möchte ich prüfen, ob der Datensatz schon vorhanden ist und nur wenn nicht, diesen Datensatz in die lokale Datenbank (bzw Tabelle) schreiben. Später würde das auch Datensätze betreffen, die nur verändert wurden (aber erstmal lass ich das weg).

Ich dachte mir, dass das Vergleichen anhand des PrimärKey der beste Weg ist. Daher habe ich folgendes gemacht:

```
DatabaseMetaData metadata = ((Connection) servdbabfrage).getMetaData();
                ResultSet rsmeta = metadata.getPrimaryKeys(null, null, tabelle);
```
Wobei der Teil mit "((Connection) servdbabfrage)" als Vorschlag für ein Problem von Eclipse her kam und ich das mal übernahm.
Es gibt daher keien Fehlermeldungen, aber es wirft eine Exception:


> Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: com.mysql.jdbc.StatementImpl cannot be cast to java.sql.Connection



Beispiele von der Anwendung im Internet: How do I use DatabaseMetaData to get table column names? - Learn Java by Examples

Hier wird aber kein Statement verwendet, was bei mir als Fehler angezeigt wird, wenn ich die Klammern mit "Connect" weglasse und direkt das statement stehen habe.

Auch habe ich versucht, aus dem DatabaseMetaData ein ResultSet zu machen, aber getPrimaryKey() braucht wohl dieses....! 

Weiß jemand dazu eine Lösung, damit ich den Primärschlüssel noch auslesen kann oder eine andere Lösung, wie ich die Datensätze miteinander vergleichen könnte? 

Danke


----------



## Ullenboom (1. Jan 2013)

Hm, der Code passt ja gar nicht. Ein JDBC-Statement kann man nicht in eine Connection pressen, das ist ja was ganz anderes. (Von der Connection kommt das Statement).

Warum machst du nicht folgendes: Ein einfaches

SELECT Id-Spalte FROM Tabelle

Dann hast du alle IDs. Oder soll das generisch sein und es gibt zusammengesetzte Schlüssel, ...?


----------



## Einklang. (1. Jan 2013)

Die Tabellen wechseln ja immer......! Daher kann ich keine festen Spaltennamen angeben oder dergleichen.
Daher ja die Idee, dass ich den Primärschlüssel auslese....!

Erst dann könnte ich den Befehl mit der "ID-Spalte" durchführen und müsste ich wohl auch, um diese dann miteinander zu vergleichen....!


----------



## Einklang. (1. Jan 2013)

So hier habe ich was: Javabeginners - Primaerschluessel ermitteln

Hier wird ohne Statement eine Verbindung direkt aufgebaut, wie ich es auch gemacht habe, das aber mittels Statement immer "kürzer" machen kann, weil ich damit direkt die Methode mit dem Verbindungsaufbau aufrufe.
Da ich ohne Statement hier vorgehen muss, ist die Frage, ob es jetzt nur mit dem direktem Code funktioniert oder auch eine Methode daraus gemacht werden kann - oder wie sich das verhält??


----------



## Einklang. (2. Jan 2013)

Ok danke die Lösung habe ich jetzt: die Methode ist public bzw auch übergeordnet und ich kann die variable für den verbindungsaufbau direkt nehmen, da sie immer noch gültig ist.......!


----------

