Daten aus ResultSet in String-Liste

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo.

Vorweg muss ich gestehen, dass ich sonst immer nur mitgelesen habe was hier so Abging und mir das schon immer sehr geholfen hat. Jetzt komme ich aber in der Tat nicht weiter und ich musste mich mal registrieren um diese Frage hier zu stellen.

Ich habe ein Problem, dass ich immer eine Null-Pointer-Exception bekomme wenn ich Daten aus einem SQL-Query gespeichert in einem ResultSet in eine StringListe eintragen will.

Folgendes:

Ich habe zwei PreparedStatement:

stmtAuthor = conn.prepareStatement("insert into researcher (name) values (?);");
stmtSelectAuthor = conn.prepareStatement("select * from researcher where name = (?) group by name");

Das erste fügt einen Eintrag hinzu und das zweite prüft, ob ein String schon enthalten ist.

Jetzt das eigentliche Problem - hier der Code:

Code:
		try {
			//Pruefen ob schon in der Datenbank vorhanden
			stmtSelectAuthor.setString(1, toAdd);
			rsTest = stmtSelectAuthor.executeQuery();
			if (rsTest.next()) {
				//falls ja dann nur den namen fuer das erstellen der Relationen in der Liste speichern
				rsTest.next();
				authors_id[au_i] = rsTest.getString(1);
				au_i++;
			}
			else {
				//falls nein dann die Daten in die Datenbank schreiben
				rsTest.next();
				stmtAuthor.setString(1, toAdd);
				stmtAuthor.executeUpdate();
				//und wieder auslesen um die ID zu bekommen 
				stmtSelectAuthor.setString(1, toAdd);
				rsAuthor = stmtSelectAuthor.executeQuery();
				rsAuthor.next();
				//diese ID dann in die Liste speichern fuer die Erstellung der Relationen
				authors_id[au_i] = rsAuthor.getString(1);
				au_i++;
			}

Dort passiert folgendes: (sollte zumindest)

Prüfen ob das Statement was zurückliefert. Falls ja ist der Author schon in der Datenbank und ich will den Namen nur in einer String-Liste abspeichern, damit ich später drauf zurückgreifen kann, da ein Buch mehrere Autoren haben kann.

Falls der Author noch nicht drin ist wird dieser hinzugefügt und anschließend nochmal geprüft ob dieser nun auch drin ist und in das ResultSet geschrieben. (Ich brauche die ID von dem Eintrag) Anschließend will ich den Wert dann auch in die Liste schreiben und da ist der Fehler.

Ich bekomme immer eine NullPointerException am Punkt: authors_id[au_i] = rsAuthor.getString(1);

Ich weiß leider keinen Rat mehr. Ich bitte um Eure Hilfe.

Danke schon einmal
 
G

Guest

Gast
Warum rufts du das next() immer doppelt auf?

Code:
if (rsTest.next()) {
            //falls ja dann nur den namen fuer das erstellen der Relationen in der Liste speichern
            rsTest.next();
            
            .......
         }
         else {
            //falls nein dann die Daten in die Datenbank schreiben
            rsTest.next();
           .........
         }

Zum Verständnis, next() liefert einerseits true oder false zurück und setzt den DB-Cursor im Erfolgsfall auch gleich auf die nächste Zeile.

Im if-Fall führt das zweite next dazu, das eine Zeile übersprungen wird, im else-Fall macht es überhaupt keinen Sinn, da ja bereits if(reTest.next()) false war.
 
S

SlaterB

Gast
das ResultSet kann nicht null sein, dann gäbe es schon vorher eine Exception,
kann nur authors_id null sein
 
G

Guest

Gast
Ok erscheint logisch - ich habe jetzt mal die beiden sinnfreien weiterschaltungen auskommentiert.

Trotzdem immernoch der Fehler:

Code:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at addToDB.AddToDB.addThis(AddToDB.java:111)

Der Code nun:

Code:
		try {
			//Pruefen ob schon in der Datenbank vorhanden
			stmtSelectAuthor.setString(1, toAdd);
			rsTest = stmtSelectAuthor.executeQuery();
			if (rsTest.next()) {
				//falls ja dann nur den namen fuer das erstellen der Relationen in der Liste speichern
				//rsTest.next();
				authors_id[au_i] = rsTest.getString(1); // <--- HIER IST ZEILE 111
				au_i++;
			}
			else {
				//falls nein dann die Daten in die Datenbank schreiben
				//rsTest.next();
				stmtAuthor.setString(1, toAdd);
				stmtAuthor.executeUpdate();
				//und wieder auslesen um die ID zu bekommen 
				stmtSelectAuthor.setString(1, toAdd);
				rsAuthor = stmtSelectAuthor.executeQuery();
				//rsAuthor.next();
				//diese ID dann in die Liste speichern fuer die Erstellung der Relationen
				authors_id[au_i] = rsAuthor.getString(1);
				au_i++;
			}

Also ist der Fehler immernoch da wo er versucht, den String in die Liste zu schreiben.

Denke mal beim Else-Fall wäre der selbe Fehler, aber soweit wird der wohl gerade nicht gekommen sein.

Dass die ID von einem Author null sein könnte geht nicht, da die Tabelle Researcher nur 2 Spalten hat: ID und Author wobei ID ein autoincrement ist und daher nicht null sein kann wenn der Author drin steht.

Danke auf jeden fall schonmal für die ersten Hilfen!

Grüße
 

narfist

Mitglied
SlaterB hat gesagt.:
SlaterB hat gesagt.:
das ResultSet kann nicht null sein, dann gäbe es schon vorher eine Exception,
kann nur authors_id null sein

Ja das hab ich schon gelesen, aber ich habe alles als öffentliche Klassenvariable initialisiert:

public static ResultSet rsAuthor;
public String authors_id[];

Und wenn der in den IF-Fall geht steht im ResultSet ja etwas, was heißt, dass schon einmal der Author drin steht und auch eine ID hat. Also müsste im ResultSet etwas der Art stehen: [ID,Author] und das kann ich ja nur mit .getString(1); abgreifen und die ID liefern. Diese wiederum wird ja als String behandelt und sollte eigentlich ohne problem in die Liste geschrieben werden können.

Ich weiß von deinem Tipp her leider nicht wo der Denkfehler ist.

(Zum Verständnis: Ich brauche die IDs um damit die Relationen zwischen den Tabellen aufbauen zu können.)

Grüße

[EDIT]Ich bin der Gast von oben - jetzt doch mal tatsächlich eingeloggt[/EDIT]
 
S

SlaterB

Gast
das String[] authors_id ist null, und jeder Zugriff darauf führt zu einer NullPointerException,

ich weiß nicht wieso du über das ResultSet redest und was ich da noch mehr sagen könnte
 

narfist

Mitglied
Ja wie soll ich denn sonst die Werte aus dem ResultSet in die String-Liste bekommen?

Ich dachte, dass es über eine solche Zuweisung geht. Es wird ja jeweils ein neues Feld der Liste mit au_i (Zähler für die Liste).

Ein anderes hinzufügen habe ich leider nicht gefunden. Wie sollte ich denn das sonst machen?

Grüße
 

narfist

Mitglied
Ok ist vieleicht nicht das eleganteste aber das tut es auch. Danke dafür.

Nächste Frage follgt gleich:

SQLException at Author: Before start of result set

jetzt meckert der aber tatsächlich mit dem ResultSet rum.

Code:
		try {
			//Pruefen ob schon in der Datenbank vorhanden
			stmtSelectAuthor.setString(1, toAdd);
			rsTest = stmtSelectAuthor.executeQuery();
			if (rsTest.next()) {
				//falls ja dann nur den namen fuer das erstellen der Relationen in der Liste speichern
				authors_id[au_i] = rsTest.getString(1);
				au_i++;
			}
			else {
				//falls nein dann die Daten in die Datenbank schreiben
				//rsTest.next();
				stmtAuthor.setString(1, toAdd);
				stmtAuthor.executeUpdate();
				//und wieder auslesen um die ID zu bekommen 
				stmtSelectAuthor.setString(1, toAdd);
				rsAuthor = stmtSelectAuthor.executeQuery();
				//diese ID dann in die Liste speichern fuer die Erstellung der Relationen
				authors_id[au_i] = rsAuthor.getString(1);
				au_i++;
			}
		} catch (SQLException e) {
			System.out.println("SQLException at Author: " + e.getMessage());
		}

Das ist immernoch der Code ;)

Ich versteh allerdings nicht ganz was mir dieser Fehler sagen will
 
S

SlaterB

Gast
Zeilennummer weglassen wird auch nicht besser, wenn es ein Anschlussfrage ist ;)

wahrscheinlich meinst du Zeile 19,
und dort gilt nunmal immer noch die Regel: bevor man etwas aus einem ResultSet lesen kann, muss man per next() den ersten Eintrag aktivieren,
noch fehlt der next() Aufruf
 

narfist

Mitglied
Ok vielen Dank für die Hilfe - Ich habe jetzt die Fehler gefunden und behoben und es funktioniert.

Für Leute die das noch einmal lesen:

Meine Fehler waren das nicht initialisieren der String-Liste: public String[] authors_id = new String[70];
und das ich vergessen hatte das ResultSet mit .next() weiterzuschalten.

Der Code sieht nun also wie folgt aus:

Code:
	public String[] authors_id = new String[70];
......
			stmtAuthor = conn.prepareStatement("insert into researcher (name) values (?);");
			stmtSelectAuthor = conn.prepareStatement("select * from researcher where name = (?) group by name");
......
		try {
			//Pruefen ob schon in der Datenbank vorhanden
			stmtSelectAuthor.setString(1, toAdd);
			rsTest = stmtSelectAuthor.executeQuery();
			if (rsTest.next()) {
				//falls ja dann nur den namen fuer das erstellen der Relationen in der Liste speichern
				authors_id[au_i] = rsTest.getString(1);
				au_i++;
			}
			else {
				//falls nein dann die Daten in die Datenbank schreiben
				stmtAuthor.setString(1, toAdd);
				stmtAuthor.executeUpdate();
				//und wieder auslesen um die ID zu bekommen 
				stmtSelectAuthor.setString(1, toAdd);
				rsAuthor = stmtSelectAuthor.executeQuery();
				rsAuthor.next();
				//diese ID dann in die Liste speichern fuer die Erstellung der Relationen
				authors_id[au_i] = rsAuthor.getString(1);
				au_i++;
			}
		} catch (SQLException e) {
			System.out.println("SQLException at Author: " + e.getMessage());
		}
......

Vielen Dank nochmals an alle die geholfen haben.

Grüße
 

dominikD

Neues Mitglied
Bist du darauf angewiesen ein String-Array zu verwenden?

An deiner stelle würde ich eine ArrayList oder ähnliches verwenden. Damit wärst du um einiges flexibler, es könnte die bei deiner jetzigen Lösung irgendwann einmal passieren, dass du einen Eintrag aus dem ResultSet an eine stelle im String-Array schreiben willst die nicht vorhanden ist.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C ResultSet enthält nicht alle Daten Datenbankprogrammierung 4
S ResultSet enthält keine Daten Datenbankprogrammierung 2
I Kann keine Daten aus ResultSet holen ? Datenbankprogrammierung 11
R Daten aus ResultSet in HashMap speichern Datenbankprogrammierung 3
D Alte Daten ins neue Modell quetschen Datenbankprogrammierung 2
R Mongodb Daten werden immer überschrieben Datenbankprogrammierung 7
R Mongodb Daten in einem bestimmten Document speichern Datenbankprogrammierung 1
OnDemand Daten auf mehrere Tabellen aufteilen oder Spalten nutzen Datenbankprogrammierung 2
B Daten HSQL-DB Datenbankprogrammierung 2
V H2 ManyToMany wie speichere ich die Daten? Datenbankprogrammierung 10
thobren Projekt SQlite! Wie kann ich auf auf SQlite Daten zugreifen? Datenbankprogrammierung 4
OnDemand Daten verschlüsseln Datenbankprogrammierung 42
L Oracle Daten in Häppchen selektieren Datenbankprogrammierung 5
L Oracle Daten von Oracle zu MSSQL übertragen Datenbankprogrammierung 4
D Daten aus der Firebase-Echtzeitdatenbank abfragen und in Variablen speichern (JAVA) Datenbankprogrammierung 0
Z Ausgabe nur bestimmter Daten Datenbankprogrammierung 6
E netbeans - jsp Daten in Datenbank hinzufügen Datenbankprogrammierung 2
N Java Abfrage über GUI, Daten hinzufügen Datenbankprogrammierung 54
Kirby.exe Vorschläge zur Verschlüsselung von Daten in der DB Datenbankprogrammierung 2
T Java Spiel Daten speichern Datenbankprogrammierung 1
LimDul H2 Embedded DB und Gigabytes an Daten Datenbankprogrammierung 0
C Datenbank anlegen und über eine Website mit Daten füllen? Datenbankprogrammierung 25
R Wie mit zu viele Daten umgehen? Datenbankprogrammierung 2
F MySQL Wie speichere ich Daten zeitlich abhängig? Datenbankprogrammierung 4
T Oracle Normalisierung und Daten splitten Datenbankprogrammierung 1
JG12111989 DB-Daten werden falsch dargestellt Datenbankprogrammierung 7
K H2 Daten in die H2 console DB eintragen Datenbankprogrammierung 2
L SQLite Ändern der Daten in einem UNIQUE Feld Datenbankprogrammierung 1
S Daten von SQLite Datenbank nutzen Datenbankprogrammierung 5
P JSP - Daten aus 2 Tabellen in eine neue Tabelle einfügen Datenbankprogrammierung 1
L Oracle Daten von einem Server zum andere kopieren Datenbankprogrammierung 24
P Daten in eine mySQL Datenbank einfügen Datenbankprogrammierung 4
L MySQL Vergleichen von Array-Inhalt, Ausgabe gleicher Daten Datenbankprogrammierung 3
W Daten in Java intern abfragen Datenbankprogrammierung 1
G MySQL Java Problem: Nullpointer Exception obwohl Daten vorhanden sind? Datenbankprogrammierung 2
W Daten aus einer Datei von einem VServer auslesen Datenbankprogrammierung 1
I MySQL Datenbankstruktur angleichen - Daten behalten Datenbankprogrammierung 7
O JDBC Daten in zwei Tabellen mit zwei foreach-Schleifen einfügen (insert into) Datenbankprogrammierung 1
P LDAP: Daten eintragen funktioniert nicht Datenbankprogrammierung 7
B MySQL LogIn Daten im Code verstecken Datenbankprogrammierung 3
O mit Multi-Thread Daten aus Datenbank lesen und schreiben Datenbankprogrammierung 22
F Daten verdichten Datenbankprogrammierung 0
Z Finde den Fehler: Daten aus einer Access-Datenbank lesen Datenbankprogrammierung 12
B Daten aus DB in Word Dokument Datenbankprogrammierung 2
D Aktualisierung einer ListView mit Daten aus MySQL-DB Datenbankprogrammierung 5
D Daten posten auf RestApi (Mongodb/NoSQL) Datenbankprogrammierung 0
I Fehler bei Ausgabe der Daten aus der DB Datenbankprogrammierung 3
OnDemand MySQL Daten aktualisieren Datenbankprogrammierung 6
D Daten von einem Server in eigenem Java-Programm benutzen Datenbankprogrammierung 6
M Vergleich von Daten in verschiedenen Tabellen Datenbankprogrammierung 1
S Daten aus Form in Datenbank nur einmal eintragen Datenbankprogrammierung 2
6 JBDC Daten verschlüsseln? Datenbankprogrammierung 2
F MySQL Daten ändern über Java Datenbankprogrammierung 3
G SQLite Daten aus SQLite DB in andere SQLite DB importieren Datenbankprogrammierung 4
H Grosse Menge an Daten in eine Datenbank Datenbankprogrammierung 32
M Daten nachträglich hinzufügen Datenbankprogrammierung 6
2 MySQL Daten aus einer Array auslesen und MySQL Statment erstellen. Datenbankprogrammierung 5
E Daten einer SQL-Datenbank aus Combobox in labels schreiben Datenbankprogrammierung 6
N HSQLDB Daten Auslesen Datenbankprogrammierung 3
O Viele Verbindungen-Exception bei insert Daten zur MySQL-Datenbank Datenbankprogrammierung 2
P MySql daten in leeren jtable übertragen Datenbankprogrammierung 5
SexyPenny90 SQL Daten sortieren und top 5 ausgeben Datenbankprogrammierung 7
L Hibernat will Daten nicht einfügen??? Datenbankprogrammierung 2
B MySQL DB Daten aktualisieren Datenbankprogrammierung 9
D MySQL Daten werden aus Datenbank gelesen, obwohl sie dort gar nicht angekommen sind Datenbankprogrammierung 8
Kenan89 Oracle Daten einer Tabelle in Array speichern Oracle Datenbankprogrammierung 10
L SQLite Daten werden nicht in die Tabelle eingefügt Datenbankprogrammierung 7
D Übersichtliche Zuweisung von Daten in Tabellen Datenbankprogrammierung 17
A Problem mit Eintragen von Daten in eine Datenbank mittels DAO Datenbankprogrammierung 4
J Daten synchronisieren in Multi-Client-Anwendungen (Hibernate) Datenbankprogrammierung 6
S JPA: DB Schema ändern und Daten nicht verlieren - wie? Datenbankprogrammierung 5
T MySQL Select: Zusammenfassen von Daten und bilden von Durchschnitt? Datenbankprogrammierung 4
F Daten in die DB hinzufügen Datenbankprogrammierung 7
H Klasse welche Mysql Daten zurück gibt Datenbankprogrammierung 18
S JPA: Problem mit Update von Daten Datenbankprogrammierung 7
H Daten in/aus Datenbank schreiben Datenbankprogrammierung 2
M DropDownBoxen mit MySQL Daten füllen Datenbankprogrammierung 3
E MySQL Daten in die Datenbank eingeben via Java Programm Datenbankprogrammierung 3
F ORA 17410 Keine weiteren Daten aus Socket zu lesen Datenbankprogrammierung 2
B Daten aus Datenbank holen Datenbankprogrammierung 6
T Problem beim schreiben von daten Datenbankprogrammierung 4
N Daten aus Datenbank abfragen und anzeigen in der Praxis?? Datenbankprogrammierung 2
G MySQL Bekomme keine Daten. Datenbankprogrammierung 7
L CLOB-Daten werden beim Einfügen in die Datenbank geändert? Datenbankprogrammierung 5
G Daten aggregieren Datenbankprogrammierung 11
Gossi Oracle 2 Daten (Datum) vergleichen Datenbankprogrammierung 6
W MySQL Daten aus bestimmter Spalte lesen Datenbankprogrammierung 2
E MySQL Befüllen einer MySQL DB mit großen Daten Datenbankprogrammierung 6
J Doppelte Daten in Spalte, nur die erste abrufen wie? Datenbankprogrammierung 15
P Daten aus MySql Datenbank lesen??? Datenbankprogrammierung 6
J Daten vergleichen Datenbankprogrammierung 10
S Daten einer Tabelle vergleichen und ggs neuen Wert einfügen Datenbankprogrammierung 8
X Daten einer DatenbankTabelle in JTable darstellen Datenbankprogrammierung 13
T Designfrage: DB-Daten direkt oder verzögert speichern Datenbankprogrammierung 2
Dragonfire Daten aus jsp Datei in datenbank speichern Datenbankprogrammierung 15
A Daten von Webshop einlesen Datenbankprogrammierung 5
S Daten aus jTextfiled in DB schreiben - SQL Befehl Datenbankprogrammierung 2
T Daten aus DB in variable Zahl an Variablen speichern Datenbankprogrammierung 18
A Datenbankanbindung an mySQL und Ein-/Auslesen der Daten Datenbankprogrammierung 4
D Vector mit Daten aus der Datenbank füllen Datenbankprogrammierung 7

Ähnliche Java Themen

Neue Themen


Oben