# DB-Daten werden falsch dargestellt



## JG12111989 (6. Jun 2019)

Hallo zusammen,

ich habe eine Anwendung geschrieben, mit der ich meine Datenbank (MS SQL) bearbeiten kann.
Mein Problem ist, wenn ein abgefragter Zelleninhalt = "0.00000000000000" ist, wird im Output "0E-14" angegeben. Woran liegt das?

Ich löse das momentan, indem ich den eingelesenen Inhalt überprüfe und bei Bedarf ändere:

```
while (result.next()) {
          String kArt = result.getString("kArtikel");
          if(kArt.equals("0E-14")){
              kArt="0.00000000000000";
          }
          String fVKNet = result.getString("fVKNetto");
          if(fVKNet.equals("0E-14")){
              fVKNet="0.00000000000000";
          }
          String fUVP = result.getString("fUVP");
          if(fUVP.equals("0E-14")){
              fUVP="0.00000000000000";
          }
          String info = kArt + ", " + fVKNet + ", " + fUVP;
          System.out.println(info);
}
```
 

Gibt es vllt eine bessere, universellere Lösung, als jede Variable einzeln zu prüfen?


----------



## mihe7 (6. Jun 2019)

Kein getString() verwenden?


----------



## JG12111989 (6. Jun 2019)

mihe7 hat gesagt.:


> Kein getString() verwenden?



Da ich im Vorfeld nicht weiß, was für ein Inhalt mich erwartet, habe ich mich für String entschieden. Es muss allgemein für jeden möglichen Inhalt funktionieren.
Mich wundert, dass das Problem nur bei 0.0 auftritt...


----------



## mihe7 (6. Jun 2019)

JG12111989 hat gesagt.:


> Da ich im Vorfeld nicht weiß, was für ein Inhalt mich erwartet, habe ich mich für String entschieden.


Huch, das musst Du mal näher erklären. Die Spalte in der DB-Tabelle hat doch einen fixen Datentyp


----------



## Thallius (6. Jun 2019)

Wenn du im Vorfeld Nicht weist was dich erwartet dann hast du aber ein ganz mieses Konzept. Woher weist du denn dann was das überhaupt ist, wozu es gut ist und was man damit machen kann?


----------



## JG12111989 (6. Jun 2019)

Okay, folgendes:


```
while (result.next()) {

          String info="";

          for(int i=1; i<=counterColumns;i++){

                    String kArt = result.getString(i);

                    info = info+ kArt +", ";

          }

         System.out.println(info);

}
```

Ich habe mehrere Tabellen und Abfragen und möchte einfach nur das Ergebnis dieser darstellen


----------



## mrBrown (6. Jun 2019)

Was spricht denn gegen 0E-14?


----------



## kneitzel (6. Jun 2019)

Also wenn Du Columns lesen willst ohne deren Typ zu kennen, dann würde ich da mir einen Helper schreiben, der mir eben die Daten richtig ausliest und entsprechend formatiert.

Dazu kannst Du auf dem result getMetaData() aufrufen:
https://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html#getMetaData() 

Da bekommst Du eine ResultSetMetaData Referenz zurück auf der Du dann getColumnType aufrufen kannst:
https://docs.oracle.com/javase/7/docs/api/java/sql/ResultSetMetaData.html#getColumnType(int) 

Der Wert, der zurück kommt, kommt von java.sql.Types:
https://docs.oracle.com/javase/8/docs/api/java/sql/Types.html 

Abhängig vom jeweiligen Typ kann dann der Wert korrekt gelesen werden und dann wie gewünscht auch formatiert werden.
(Die Java Funktionalitäten um diverse Typen zu formatieren sollten ja bekannt sein, daher gehe ich darauf nicht ein.)


----------

