2010-11-22 7 views
1

Ich benutze Sqlite mit Java mit SQLiteJDBC. Wenn SQLite-Abfrage, ich habe, dass diese beiden Rückkehr verschiedene Dinge herausgefunden:Java + sqlite REAL Feld zu String

String str = result.getDouble("field_name").toString(); 
String str = result.getString("field_name"); 

Letztere implizit die Ziffer der REAL-Zahl in SQLite abrundet, und wandelt sie in String. Ersteres macht nicht die Runde Sache. Ist das ein Fehler in der SQLite-JDBC-Implementierung oder ist das in SQL-Abfragen allgemein üblich?

+0

BTW, was meinst du mit 'REAL Nummer'? Wird es in Integer konvertiert, bevor es schließlich in String konvertiert wird? –

+0

Der Datentyp von sqlite ist nicht typsicher und entspricht nicht dem SQL-Standard. Dies ist beabsichtigt, da dies eine * lite * -Datenbank ist. –

+1

@Adeel Ansari: REAL ist ein Datentyp von SQLite, der nicht DOUBLE oder FLOAT enthält. –

Antwort

2

Nein, es ist kein Bug, definitiv. In ersterem Fall wird die toString() Methode der Double Klasse aufgerufen. Während im letzteren Fall die SQLLite-Implementierung funktioniert.

+0

+1: SQLite und Java haben einen anderen Code für die Konvertierung zwischen IEEE-Floats und Strings mit doppelter Genauigkeit, und das ist eine Operation, die * sehr * schwierig ist, richtig zu arbeiten. –

+0

Danke. Es ist also die SQLite-Implementierung von JDBC, die den REAL-Wert trimmt, um einen String zu bilden, oder? –

+0

@Felix: Ja genau. :) –