DieMstar Geschrieben 23. Juli 2018 Teilen Geschrieben 23. Juli 2018 (bearbeitet) Hey Leute! Folgendes Problem: Ich hab eine Datenbank mit den Attributen: Kundennummer ,Vorname, nachname, plz, ort ich hab eine Klasse Kunde mit den selben Attributen erstellt. SELECT * from Kunde in Konsole ausgeben. Pro Zeile des Ergebnisses soll ein Java-Objekt „Kunde“ erstellt werden und die Eigenschaften mit den Werten aus der Tabelle gefüllt werden. Diese Kunden sollen in einer Liste gespeichert werden. ich komm nicht drauf wie ich pro Zeile der ausgabe in das Object speichern kann. jemand eine Idee? Bearbeitet 23. Juli 2018 von DieMstar Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 Whiz-zarD Geschrieben 23. Juli 2018 Teilen Geschrieben 23. Juli 2018 Das, was du willst, nennt sich O/R-Mapping (Object/Relationship-Mapping). Ganz stumpf heißt es, dass du den Inhalt von Spalte "Kundennummer" in das Klassenattribut "Kundennummer" schreiben musst. Du musst also jede Spalte aus dem Ergebnis auslesen und dementsprechend mappen. Dazu gibt es aber komplette Frameworks, die dies übernehmen, da es je nach Situation nicht trivial ist. Für Java gibt es z.B. Hibernate. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 DieMstar Geschrieben 23. Juli 2018 Autor Teilen Geschrieben 23. Juli 2018 (bearbeitet) Danke für deine Antwort Whiz-zarD hab mir das Hibernate durchgelesen, aber versteht es leider nicht xD Wir hatten leider bei uns noch 0 mit Frameworks oder Mapping zu tun =/ Bearbeitet 23. Juli 2018 von DieMstar Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 Whiz-zarD Geschrieben 23. Juli 2018 Teilen Geschrieben 23. Juli 2018 Ist das eine Schulaufgabe? Wo hapert es denn? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 OMem Geschrieben 23. Juli 2018 Teilen Geschrieben 23. Juli 2018 Dein Programm muss irgendwie wissen welche Java-Klassen mit welcher Datenbanktabelle auf welcher Datenbank in verbindung steht. Am besten suchmaschienst du nach Hibernate, da solltest du beispiele finden wie man eine einfache Klasse mit einer Datenbank verbindet. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 DieMstar Geschrieben 23. Juli 2018 Autor Teilen Geschrieben 23. Juli 2018 (bearbeitet) @Whiz-zard ja ist eine Schulaufgabe. Ich denke nicht das wir die Aufgabe mithilfe von Frameworks lösen sollen, da wir dieses Thema noch nicht hatten. Die genaue Aufgabe lautet: 1. Im Datenbanksystem eine Tabelle „Kunde“ erstellen mit den Spalten Kundennummer, Nachname, Vorname, Straße, Postleitzahl, Ort, wobei die Kundenummer der eindeutige Schlüssel sein soll. 2. Im Datenbanksystem zwei Kunden anlegen die alle Spalten gefüllt haben. 3. In Eclipse ein Java-Projekt anlegen mit einer Klasse Start, die eine Methode public static void main(String[] args) hat. 4. Die externe Bibliothek sqljdbc4-4.0.jar für den Datenbankzugriff in das Projekt einbinden. 5. Eine Java-Klasse „Kunde“ anlegen, die dieselben Eigenschaften wie die Tabelle hat. Get- und Set-Methoden zu diesen Eigenschaften anlegen. 6. In der Klasse Start in der Main-Methode soll per JDBC eine Datenbankverbindung zu der Datenbank erstellt werden und das Select-Statement: „SELECT * FROM Kunde“ aufgerufen werden. 7. Pro Zeile des Ergebnisses soll ein Java-Objekt „Kunde“ erstellt werden und die Eigenschaften mit den Werten aus der Tabelle gefüllt werden. Diese Kunden sollen in einer Liste gespeichert werden. 8. Die Liste soll einmal durchlaufen werden und pro Kunde der Vorname, Nachname und die Kundennummer in einer Zeile in der Konsole ausgegeben werden. und mein Code sieht bisher so aus: public class Main { public static void main(String args[]) throws ClassNotFoundException, SQLException { Class.forName("com.mysql.jdbc.Driver"); Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/","root","area51"); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM praktikum_aufgabe.kunde"); rs.next(); if(rs.getObject(1) == null) { stmt.executeUpdate("INSERT INTO praktikum_aufgabe.kunde (nachname,vorname,postleitzahl,straße,ort) " + "Values('dieter','bauer','86551','waldweg 29','aichach')"); stmt.executeUpdate("INSERT INTO praktikum_aufgabe.kunde (nachname,vorname,postleitzahl,straße,ort) " + "Values('manueal','jansen','86551','steiner weg 2','aichach')"); } int i = 1; while(rs.next()) { System.out.println(rs.getObject(i)); i++; } } ich wollte mir erstmal das recordset in der console ausgeben, funktioniert aber noch nicht. Bin mir nicht sicher ob das nur mit MetaData geht, weil kundennummer und plz Integer sind und der Rest Strings. Und dann muss ich irgendwie die ausgegeben Zeilen oder das rs pro Zeile als Object Kunde anlegen. Die Klasse Kunde hab ich mit private Attributen Konstruktoren und Gett und Settern erstellt. Bearbeitet 23. Juli 2018 von DieMstar Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 Whiz-zarD Geschrieben 23. Juli 2018 Teilen Geschrieben 23. Juli 2018 (bearbeitet) Die Indexvariable i benötigst du nicht, da über die next()-Methode der interne Zeiger schon auf die nächste Zeile gesetzt wird. Die Methoden vom ResultSet (z.B. getObject()) erwarten als Parameter nämlich nicht die Zeilennummer, sondern den Spaltenindex. Also entweder als Integer- oder als String. Anstatt i reichst du dort z.B. "Vorname" rein und anstatt getObject verwendest du getString(). while(rs.next()) { System.out.println(rs.getString("Vorname")); } Bearbeitet 23. Juli 2018 von Whiz-zarD Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 Mttkrb Geschrieben 23. Juli 2018 Teilen Geschrieben 23. Juli 2018 (bearbeitet) Hi, mit rs.next() springst du zur nächsten Ergebniszeile. der returnwert ist false, wenn es keine Zeilen mehr gibt. mit rs.getObject() greifst du auf eine bestimmte Spalte in deiner aktuellen Zeile zu. Hier kann der passende Index oder Spaltenname genommen werden. Und anstatt getObject nutze hier aber lieber getInt oder getString für den jeweiligen Datentyp. @Whiz-zarD da war ich etwas zu langsam ? Bearbeitet 23. Juli 2018 von Mttkrb Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 DieMstar Geschrieben 23. Juli 2018 Autor Teilen Geschrieben 23. Juli 2018 (bearbeitet) habs jetz so geschrieben, ums in einer Zeile in der Konsole ausgegeben zu bekommen: System.out.println( rs.getInt("kundennummer") + " " + rs.getString("nachname") + " " + rs.getString("vorname") + " " + rs.getInt("postleitzahl") + " " + rs.getString("straße") + " " + rs.getString("ort")); was ich noch nicht ganz verstehe ist, das es mir den zweiten Daensatz in der konsole ausgibt und den ersten überspringt. hab zb. 1 dieter bauer 86551 weladweg 29 aichach 2 peter maier 86551 neuerweg 20 aichach da überspringt es mir in der ausgabe die erste Zeile o.O Bearbeitet 23. Juli 2018 von DieMstar Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 DieMstar Geschrieben 23. Juli 2018 Autor Teilen Geschrieben 23. Juli 2018 (bearbeitet) das mit den Datensätzen in der Console hat sich erledigt, bekomme jetzt alle Datensätze in der Konsole angezeigt. Hab das recordset nochmal neu initialisieren müssen nach dem executeUpdate. wie bekomme ich nun möglichst unkompliziert die einzelnen Zeilen in seperate Objekte gespeichert? Bearbeitet 23. Juli 2018 von DieMstar Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 Whiz-zarD Geschrieben 23. Juli 2018 Teilen Geschrieben 23. Juli 2018 (bearbeitet) Schau mal genau hin. ResultSet rs = stmt.executeQuery("SELECT * FROM praktikum_aufgabe.kunde"); rs.next(); <-- erste Zeile wird gelesen if(rs.getObject(1) == null) { stmt.executeUpdate("INSERT INTO praktikum_aufgabe.kunde (nachname,vorname,postleitzahl,straße,ort) " + "Values('dieter','bauer','86551','waldweg 29','aichach')"); stmt.executeUpdate("INSERT INTO praktikum_aufgabe.kunde (nachname,vorname,postleitzahl,straße,ort) " + "Values('manueal','jansen','86551','steiner weg 2','aichach')"); } while(rs.next()) <-- nächste Zeile wird gelesen { ... } vor 2 Minuten schrieb DieMstar: wie bekomme ich nun möglichst unkompliziert die einzelnen Zeilen in seperate Objekte gespeichert? Das sollte doch ein Selbstgänger sein, oder nicht? Du hast eine Schleife. Du kannst die Daten aus der Tabelle lesen. Was hält dich nun davon ab, Kundenobjekte mit den Daten aus der Tabelle zu erzeugen? Bearbeitet 23. Juli 2018 von Whiz-zarD Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 DieMstar Geschrieben 23. Juli 2018 Autor Teilen Geschrieben 23. Juli 2018 @Whiz-zard danke dir habs jetz so gelöst: ArrayList liste = new ArrayList(); while (rs.next()) { liste.add(new Kunde(rs.getInt("kundennummer"), rs.getString("nachname"), rs.getString("vorname"), rs.getInt("postleitzahl"), rs.getString("straße"), rs.getString("ort"))); System.out.println( rs.getInt("kundennummer") + " " + rs.getString("nachname") + " " + rs.getString("vorname") + " " + rs.getInt("postleitzahl") + " " + rs.getString("straße") + " " + rs.getString("ort")); } System.out.println(); System.out.println("Ausgabe der Liste: \n"); Iterator it = liste.iterator(); while(it.hasNext()) { System.out.println(it.next()); } muss nurnoch irgendwie kucken das ich .toString formatiere, weil ich in der console nur den Speicherpfad angezeigt bekomme: 1 dieter bauer 86551 waldweg 29 aichach 2 manueal jansen 86551 blumenstraße 44 aichach Ausgabe der Liste: Kunde@1794d431 Kunde@42e26948 eine Idee?:P Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 DieMstar Geschrieben 23. Juli 2018 Autor Teilen Geschrieben 23. Juli 2018 Hat sich erledigt bin fertig Danke für eure Hilfe! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Frage
DieMstar
Hey Leute!
Folgendes Problem:
Ich hab eine Datenbank mit den Attributen: Kundennummer ,Vorname, nachname, plz, ort
ich hab eine Klasse Kunde mit den selben Attributen erstellt.
SELECT * from Kunde in Konsole ausgeben.
Pro Zeile des Ergebnisses soll ein Java-Objekt „Kunde“ erstellt werden und die Eigenschaften mit den Werten aus der Tabelle gefüllt werden.
Diese Kunden sollen in einer Liste gespeichert werden.
ich komm nicht drauf wie ich pro Zeile der ausgabe in das Object speichern kann.
jemand eine Idee?
Link zu diesem Kommentar
Auf anderen Seiten teilen
12 Antworten auf diese Frage
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.