# Leere Zelle von einer DB abfragen



## Amenophis (17. Okt 2008)

Hallo zusammen,

ich versuche ein ResultSet in ein 2-dimensionales Array einzulesen. Soweit klappt das auch. 

In einigen Zellen der Datenbank steht aber nichts drin. Falls kein Wert in der Zelle steht, soll eine "0" in das Array geschrieben werden.

Hier mein bisheriger Code (schaut euch vor allem Zeile 8 an):


```
ResultSetMetaData rsmd = rset2.getMetaData();
int clmCnt = rsmd.getColumnCount(); 
int a = 1, w = 0;
	String arr[][] = new String[100][3];
	while (rset2.next()) {
		int v=0;
		for (int i = 1; i <= clmCnt; i++) {					
			if (rset2.getString(i).length()==0) {
				arr[w][v] = "0";
			}else {
			arr[w][v]= rset2.getString(i);
			}
			v++;
	            }
	}
```

Wenn ich dies ausführe, bekomme ich folgenden Fehler:


```
java.sql.SQLException: No data found
at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.SQLGetDataString(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcResultSet.getDataString(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcResultSet.getString(Unknown Source)
....
```

Das komische ist, wenn ich aber dies schreibe, funktioniert es (Zeile 8):


```
ResultSetMetaData rsmd = rset2.getMetaData();
int clmCnt = rsmd.getColumnCount(); 
int a = 1, w = 0;
	String arr[][] = new String[100][3];
	while (rset2.next()) {
		int v=0;
		for (int i = 1; i <= clmCnt; i++) {					
			if (1==1) {
				arr[w][v] = "0";
			}else {
			arr[w][v]= rset2.getString(i);
			}
			v++;
	            }
	}
```


Habe auch schon hiermit versucht: 


```
rset2.getString(i).isEmpty()

rset2.getString(i).equals("")

rset2.getString(i).equals(null)

rset2.getString(i)==""
```

Aber immer die gleiche Fehlermeldung. Was mache ich falsch?


----------



## pinhead84 (18. Okt 2008)

Guten Morgen,



			
				Amenophis hat gesagt.:
			
		

> Wenn ich dies ausführe, bekomme ich folgenden Fehler:
> 
> ```
> java.sql.SQLException: No data found
> ...



Laut dem Stacktrace, wird die Exception bereits von getString() erzeugt. Demnach sind alle deine anderen Versuche vergeudete Liebesmüh. Es kommt garnicht erst zum Vergleich, sondern bereits vorher zum Abbruch, wenn getString() augeführt wird!

Es ist nicht der eleganteste Weg, aber du könntest die Exception auch einfach auswerten. Anstelle der IF-Abfrage schreibe einfach:


```
try
{
  arr[w][v]= rset2.getString(i);
}
catch (SQLException ex)
{
  arr[w][v] = "0";
}
```

Das löst aber nicht das Problem, es wird nur ignroriert! - Ich vermute mal, dass der Fehler entweder in deinem Programm / SQL-Query oder in der Implementierung des JDBC-Treibers steckt. Welchen JDBC-Treiber auf welcher Datenbank verwendest du denn?


----------



## Amenophis (20. Okt 2008)

Hey Pinhad84,

danke für dein Vorschlag, aber die Exception abzufangen und damit zu arbeiten ist wirklich ein wenig dreckig  :lol: 

Ich habe eine andere Möglichkeit gefunden, um eine leere Zelle mit "0" zu füllen:


```
if (arr[w][v]=="") {
		arr[w][v] = "0";
	}
```

Es funktioniert und ist einigermaßen sauber, aber warum das nicht klappt ist mir immnoch ein Rätsel

gruß,

Amenophis


----------



## L-ectron-X (20. Okt 2008)

Um auf "nichts" (null) zu prüfen gibts die Methode wasNull() aus ResultSet.
Die Methode gibts true oder false zurück, je nach dem, ob in der zuletzt gelesenen Spalte ein Wert enthalten ist, oder eben nichts (null) steht.


----------

