tags:

views:

89

answers:

1

So I have an app where I put arbitrary strings in a database and later extract them like this:

Cursor DBresult = myDatabase.query(false, Constant.DATABASE_NOTES_TABLE_NAME, 
            new String[] {"myStuff"}, where, null, null, null, null, null);
DBresult.getString(0);

This works fine in all cases except for when the string looks like a float number, for example "221.123123123". After saving it to the database I can extract the database to my computer and look inside it with a DB-viewer, and the saved number is correct. However, when using cursor.getString() the string "221.123" is returned. I cant for the life of me understand how I can prevent this. I guess I could do a cursor.getDouble() on every single string to see if this gives a better result, but that feels sooo ugly and inefficient. Any suggestions?

Cheers,

edit: I just made a small test program. This program prints "result: 123.123", when I would like it to print "result: 123.123123123"

SQLiteDatabase database = openOrCreateDatabase("databas", Context.MODE_PRIVATE, null);
database.execSQL("create table if not exists tabell (nyckel string primary key);");

ContentValues value = new ContentValues();
value.put("nyckel", "123.123123123");
database.insert("tabell", null, value);

Cursor result = database.query("tabell", new String[]{"nyckel"}, null, null, null, null, null);
result.moveToFirst();
Log.d("TAG","result: " + result.getString(0));
A: 

Well, I solved my own question. The problem arises from me using "string" when creating the table, instead of "text" (which seems to be the sqlite equivalence of varchar). This is because sqlite accepts any type, but as can be read under http://www.sqlite.org/datatype3.html "2.1 Determination Of Column Affinity":

"#Otherwise, the affinity is NUMERIC."

So a type that isnt recognized is numeric... so my "string"-type is numeric. Gah!

sandis