Identifying datatype of a column in an SQLite Android Cursor

The answer or NiK, is fine. But if your db is empty, his code crashes. I suggest use:

String Query = "PRAGMA table_info(my_table_name)"; 
Cursor my_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"));

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.

String tableName = "..."; // The name of the table
SQLiteDatabase db = cursor.getDatabase();
String[] names = cursor.getColumnNames();

for (name : names) {
    Cursor typeCursor = 
        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.

Tags:

Sqlite

Android