Identifying Datatype Of A Column In An Sqlite Android Cursor
Solution 1:
Per the SQLite documentation (http://www.sqlite.org/datatype3.html) columns in SQLite don't have a datatype -- the values in those columns do.
Any column in an SQLite version 3 database, except an INTEGER PRIMARY KEY column, may be used to store a value of any storage class.
If you're using API level 11 or above then the cursor supports getType()
(see http://developer.android.com/reference/android/database/AbstractWindowedCursor.html#getType(int)).
If you're using an earlier API level, and you know that all the results in a given cursor come from the same table then you could do something like (untested):
// Assumes "cursor" is a variable that contains the cursor you're// interested in.StringtableName="..."; // The name of the tableSQLiteDatabasedb= cursor.getDatabase();
String[] names = cursor.getColumnNames();
for (name : names) {
CursortypeCursor=
db.rawQuery("select typeof (" + name + ") from " + tableName;
typeCursor.moveToFirst();
Log.v("test", "Type of " + name + " is " + typeCursor.getString(0);
}
But that will (I expect) fail if the passed in cursor was (for instance) the result of a db.rawQuery() call that joined two or more tables.
Solution 2:
The answer or NiK, is fine. But if your db is empty, his code crashes. I suggest use:
StringQuery="PRAGMA table_info(my_table_name)";
Cursormy_cursor= db.rawQuery(Query, null);
my_cursor.moveToFirst();
Column_name = my_cursor.getString(my_cursor.getColumnIndex("name"));
Column_type = my_cursor.getString(my_cursor.getColumnIndex("type"));
Solution 3:
I didn't tested yet but, try to use cursor.getType(i)
Like this:
publicstatic List resultSetToArrayListAndroid(Cursor cursor)throws SQLException {
intcolumns= cursor.getColumnCount();
ArrayListlist=newArrayList();
while (cursor.moveToNext()) {
HashMaprow=newHashMap(columns);
for (inti=1; i <= columns; ++i) {
switch (cursor.getType(i)) {
case Cursor.FIELD_TYPE_FLOAT:
row.put(cursor.getColumnName(i), cursor.getFloat(i));
break;
case Cursor.FIELD_TYPE_INTEGER:
row.put(cursor.getColumnName(i), cursor.getInt(i));
break;
case Cursor.FIELD_TYPE_STRING:
row.put(cursor.getColumnName(i), cursor.getString(i));
break;
}
}
list.add(row);
}
return list;
}
Solution 4:
You should use meta data from sqlite Database :
http://developer.android.com/reference/java/sql/ResultSetMetaData.html
You get this item by using getMetaData() on a ResultSet().
So, it's not the usual way of using a sqlite database in android that you shall use, but the usual JDBC way :
- get a connection (through driver manager getConnection)
- get a statement (through connection.createStatement)
- get a resultset (through statement.executeQuery)
- get the meta data (through resultset.getMetaData)
Regards, Stéphane
Post a Comment for "Identifying Datatype Of A Column In An Sqlite Android Cursor"