[JAVA] rs.getString gibt keine reinen Zahlen aus.

Melee

Cadet 2nd Year
Registriert
März 2002
Beiträge
25
Hey Leute,
ich hab nen Problem bei meiner Datenbankabfrage (JDBC)!
Und zwar folgenden Zeile:

String SN = rs.getString ("SuNr");

gibt mir für reine Zahlenfolgen NULL aus!
Ich kann leider auch keine Integer oder sowas benutzen, da ich in der Spalte noch gemischte Zeichenfolgen habe (zB.: new23), die wiederum ordentlich ausgelesen und ausgegeben werden können.

Erweitere ich die reinen Zahlen hingegen mit einem Buchstaben, wird der Datensatz korrekt ausgegeben!

Hat jemand eine Idee, was das sein könnte?!

Danke schonmal!


PS: Mag sein, dass es ein triviales Problemchen ist.
Ich bin allerdings erst eine Woche mit Java und JDBC/ ODBC vertraut - von daher.... ;)
 
Wenn man aus einem ResultSet einen Wert ausliest und NULL bekommt, war in der Spalte in der Datenbank NULL drin, also nichts, die Spalte ist leer.

Vielleicht liegt es aber auch an deinem Vorgehen mir dem Resultset. Poste doch mal den Code-Teil, wo du die Abfrage an die Datenbank gibst und die Abfrage auslesen willst, und gib an, was für ein SQL-Datentyp auf der Datenbank in der Spalte steckt.
 
Zuletzt bearbeitet:
Hier der Code:

String query = "SELECT * FROM 123";
ResultSet rs = stmt.executeQuery(query);
while (rs.next())
{
String sSupNr = rs.getString ("1"); <-- im Prinzip liegt hier das Problem
String sPW = rs.getString ("2");
String sAdd = rs.getString ("3");
String sSupNa = rs.getString ("4");
String seMail = rs.getString ("5");
String scert = rs.getString ("6");
String sPrA = rs.getString ("7");
String sppm = rs.getString ("8");
String sEnA = rs.getString ("9");
String sPrM = rs.getString ("10");
String sSce = rs.getString ("11");

System.out.println( "\t"+"\t"+sSupNr+"\t"+"\t"+sPW+"\t"+sAdd+"\t"+
"\t"+sSupNa+"\t"+seMail+"\t"+sPrA+"\t"+scert
+"\t"+sppm+"\t"+sEnA+"\t"+sPrM+"\t"+sSce);

}

Leer ist die Spalte auf keinen Fall! Wie schon gesagt, die Werte werden nur ausgegeben sobald ein Buchstabe zugefügt wird!

Arbeite mit Eclipse! Vielleicht liegts am Compiler oder so...
 
Also eigentlich hat Cobinja recht. NULL ist ein leeres Feld in einer Datenbank.

Da Du Dir allerdings sicher zu sein scheinst, dass da was drin ist, stimmt entweder der Datentyp nicht (Du bekommst 'nen NULL Pointer zurück) oder das von Dir angegebene Feld stimmt nicht.

Probier vielleicht auch mal statt eines Strings mit SQL Ausdruck ein PreparedStatement zu verwenden, das bietet wesentlich mehr Komfort und Methoden.

Wie ist denn das Feld in der Datenbank definiert (VARCHAR, INTEGER, ...) ?
 
Zuletzt bearbeitet:
Das Problem liegt in den Anführungszeichen. Wenn Du aus dem ResultSet die erste Stelle ansprechen willst, so tu das nur mit 1,2,etc. Sobald Du einen String verwendest, geht Java davon aus, dass es sich um den Spaltennamen handelt und sucht diesen in den Metadaten. Findet er keinee entsprechenden Metadaten (Groß-/Kleinschreibung), so gibt das ResultSet NULL zurück.
Das auch einfach kein Datensatz da ist kann natürlich auch sein.
 
Alles klar. Ausser, deine Spalten auf der Datenbank heissen "1", "2", usw., wird NULL ausgegeben. Wenn du mittels des Indexes eine Spalte aus dem ResultSet lesen willst, musst du einen int übergeben. Ansonsten sucht das RS nach einer Spalte namens "1" und nicht nach Spalte Nummer 1.
 
Hab dem Feld keinen direkten Datentyp zugewiesen, da ich die Daten per JDBC/ODBC aus einer Excel Tabelle auslese!
Dachte mit dem Datentyp String auszulesen würde reichen!
Mit PreparedStatements und deren Möglichkeiten muss ich mich erstmal auseinandersetzen! ^^
Vielleicht hat jemand von euch schonmal eine passende Zeile parat, womit ich Zahlen wie z.B.: '65632' bzw. gemischte Zeichenfolgen wie 'new473' auslesen kann!?!
 
Danke! Leider hab ich jetzt nun dieses Problem!
SQLException: [Microsoft][ODBC Excel Driver]Ungültiger Zeichenwert für Konvertierungsangabe. bei Spalte 2 (Supplier_Number)

CODE:

int sSupNr = rs.getInt ("Supplier_Number");

Wie schon gesagt, ist eine gemischte Zeichenfolge!
Hat jemand noch andere Vorschläge?
 
PreparedStatement ps = con.prepareStatement(sql); //con ist die DB Connection, sql ist Dein Ausdruck (ein String)...
ResultSet rs = ps.executeQuery();
while (rs.next()) {
rs.getString("AKTIONSKENNUNG").trim();
rs.getInt("CLIENT_KENNUNG");
rs.getBoolean("PFLICHTFELD");
rs.getDate("ERSTELLT_DATUM");
};
ps.close();
con.close();

Datentyp der Datenquelle und getIrgendwas() müssen übereinstimmen (auch Excel kennt verschiedene Datentypen).
Der Zugriff erfolgt hierbei ausschliesslich über die Feldnamen, nicht die Position der Felder...
So sollte es auch mitm Nachbarn klappen ;)

Edit: AKTIONSKENNUNG ist bei mir z.B. auch eine gemischte Folge, allerdings auf der DB als VARCHAR2 (ist 'ne Oracle DB) definiert.
Versuche doch mal, im Excel die ganze Spalte als String zu definieren (also nicht Excel selber machen lassen, da es dazu neigt, bei Zahlen ein numerisches Feld draus zu machen).
 
Zuletzt bearbeitet:
Genau kenne ich die Möglichkeiten von jdbc/odbc und Excel nicht, aber in dem Fall dürften es alles Strings sein.
Eventuell gibt Excel über ODBC keine Spaltennamen an, sondern nur die Nummer (Da bin ich mir aber nicht sicher und lasse mich gerne eines Besseren belehren)
Daher solltest du wie in den beiden, leider fast zeitgleichen, Posts von Admiralz und mir beschrieben, in dem Fall nur mit den Spaltennumern als int arbeiten.
 
rs.getString(2); //Zugriff über Spaltennummer

Du musst allerdings immer sicher stellen, dass das Feld auch ein String ist. Wenn man bei Excel in ein Feld einfach 123 reinschreibt, ist es ein Integerfeld! Deshalb habe ich auch geschrieben, dass Du die Spalte MANUELL als String definieren sollst.
 
Zuletzt bearbeitet:
THX!
Es Funzt!
Das "große" Problem lag eher in Excel als im Quelltext!

Danke an alle!
 
Zurück
Oben