ich habe eine mySQL Datenbank erstellt mit 3 Spalten. Die erste ist Index auto_increment. Die anderen 2 heissen “name” und “vorname”. Die Tabele besteht aus 4 Zeilen, dort habe ich Namen von Leuten gespeichert.
Ich konnte erfolgreich Verbindung zu meiner mySQL Datenbank herstellen.
Ich habe aber ein paar Fragen dazu. Hier ist mein Code:
Ich habe in Java gelernt, dass wenn ich ein Objekt benutzen will, muss ich neue Instanz von dem erzeugen, hier wird keine Instanz erzeugt und das Objekt wird auf null gesetzt. Warum?
Könnte mir jemand diese 2 Klassen Statement und ResultSet näher erläuter? Also was die hier genau machen und wofür ich die hier brauche?
Ich verstehe das so: Die Statement Klasse macht eine Anfrage zu der Datenbank und die ResultSet Klasse holt und speichert Daten aus dieser Anfrage(also Statement). Ist ResultSet nur für Ausgabe der Daten aus der Anfrage gedacht?
Warum musste ich mein DriverManager Objekt zu Connection umwandeln? Auf der DVD hat er ohne diese Umwandlung gemacht und Eclipse hat nicht gemeckert.
So wenn die Fragen beantwortet sind, kommen dann meine weitere Fragen :D.
in meinen Augen schlechte Programmierung extrem Fehler anfällig ich würde niemals etwas auf null setzen nur wenn es nicht anders geht.
Die initialisierung ist bei dem DriverManager.getConnection, das gibt dir die Connection zurück und du musst die auch nichtmehr casten das ist schon eine Connection
Das Statement ist im gewissen Sinne dein Fenster wo du die Abfragen und so eingeben kannst, und das ResultSet das Ergebnis und da du nur ein Ergebnis bei SELECT bekommst nimmt man auch nur da das Resultset
siehe 1. und das ist kein Objekt du benutzt eine statische Methode der Klasse
Wenn ich null entferne, dann sagt eclipse: The local variable connection may not have been initialized. Wenn ich dann eclipse lasse den Fehler zu beheben, dann fügt eclipse auch “= null” hinzu.
So jetzt kommt nächste Frage. Ich möchte jetzt zb nur Daten aus der 3 Zeile(Index 2) auslesen. Ich muss bestimmt diesen String anpassen „SELECT * FROM test“ oder? Wenn ja, wie ?
weil du dadurch schnell übersiehst ob etwas initialisiert wurde oder nicht, das hatte ersteiner bei mir im Studium, er wundert sich warum er laufend null hat bis er dann gesehen hat das er irgendwie die Wertezuweisung vergessen hat.
Hätte er das = null nicht gemacht hätte Eclipse/Java was gesagt
[QUOTE=EagleEye]weil du dadurch schnell übersiehst ob etwas initialisiert wurde oder nicht, das hatte ersteiner bei mir im Studium, er wundert sich warum er laufend null hat bis er dann gesehen hat das er irgendwie die Wertezuweisung vergessen hat.
Hätte er das = null nicht gemacht hätte Eclipse/Java was gesagt[/QUOTE]
Hm, Ansichtssache. Ich persönlich bekomm lieber ne NullPointer um die Ohren geworfen. Gibt Situationen (z. B. nen try-catch Block ) wo ich einfach die Variable außerhalb auch brauch. Gut, ich kann dann falls wirklich ein Fehler auftritt der Variable immer noch null oder einen Wert zuweisen, aber irgendwie hab ich mir das so angewöhnt. Ist denk ich mal auch ne Geschmackssache.
Hab jetzt nur gedacht, du kennst einen wirklich driftigen Grund warum man das so nicht machen sollte (Mal ausgenommen von der eigenen Verplantheit ).
Aus deinem Post hab ich net 100pro rauslesen können wie deine Index-Spalte jetzt heißt. Also einfach „id“ durch den Namen deiner Index-Spalte ersetzen. Dann sollte es funktionieren …
Treiber geladen.
Verbindung hergestellt
Statement wurde erzeugt
com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘index = 2’ at line 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2870)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1573)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1665)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3118)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3047)
at com.mysql.jdbc.Statement.executeQuery(Statement.java:1166)
at Verbindung.main(Verbindung.java:47)
EDIT:
ich habe so versucht
String sql = “SELECT vorname, name FROM test WHERE index = 2”;
und dann so
String sql = “SELECT vorname, name FROM test WHERE index = 2;”;