SQLite Cursor Selecting specific columns returns all string types vs Select * returning correct types (String, Integer, etc.)

StackOverflow https://stackoverflow.com/questions/21968155

Question

I have an integer column in my database that I want to get the value of. Using the query() method getType() returns 3 (a string type) and also getInt() returns the numbers ranging from 19-21

    String[] columns = {EpisodeEntry.EPISODE_ID, EpisodeEntry.TITLE, 
        EpisodeEntry.DESCRIPTION, EpisodeEntry.PUB_DATE,
        EpisodeEntry.DURATION, EpisodeEntry.LISTENED, 
        EpisodeEntry.CURRENT_TIME};

    Cursor cursor = database.query(EpisodeEntry.TABLE_NAME, columns,
        EpisodeEntry.DIRECTORY + " = \"" + directory + "\"",
            null, null, null, null);
    Log.d("sw9", "DB CURRENT TIME TYPE: " +
        cursor.getType(cursor.getColumnIndex(EpisodeEntry.CURRENT_TIME)));

Using the rawQuery() method the cursor returns 1 (an integer type) and getInt() returns the correct number.

    Cursor cursor = database.rawQuery("SELECT * FROM episode WHERE directory = '"
        + directory + "'", null);
    Log.d("sw9", "DB CURRENT TIME TYPE: " +
        cursor.getType(cursor.getColumnIndex(EpisodeEntry.CURRENT_TIME)));

The rawQuery() method is correct but I have no idea why the query() method is incorrect. Could anyone shed light on this?

Am I better off using rawQuery() to avoid issues like this? Is the issue my fault (very possible) or Androids fault (not likely)?

EDIT: Hmm so I have isolated it to * vs naming the columns:

This returns incorrect value "14":

Cursor cursor = database.rawQuery("SELECT " + EpisodeEntry.EPISODE_ID + ", " +
            EpisodeEntry.TITLE + ", " +
            EpisodeEntry.DESCRIPTION + ", " + EpisodeEntry.PUB_DATE + ", " +
            EpisodeEntry.DURATION + ", " + EpisodeEntry.LISTENED + ", " +
            EpisodeEntry.CURRENT_TIME + " FROM episode WHERE directory = \""
            + directory + "\"", null);

This returns correct value:

Cursor cursor = database.rawQuery("SELECT * FROM episode WHERE directory = \""
            + directory + "\"", null);

Schema:

private static final String SQL_CREATE_EPISODE =
        "CREATE TABLE " + EpisodeEntry.TABLE_NAME + " (" +
                EpisodeEntry.EPISODE_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                EpisodeEntry.TITLE + TEXT_TYPE + COMMA_SEP +
                EpisodeEntry.DESCRIPTION + TEXT_TYPE + COMMA_SEP +
                EpisodeEntry.ENCLOSURE + TEXT_TYPE + " UNIQUE" + COMMA_SEP +
                EpisodeEntry.PUB_DATE + TEXT_TYPE + COMMA_SEP +
                EpisodeEntry.DURATION + TEXT_TYPE + COMMA_SEP +
                EpisodeEntry.GUID + TEXT_TYPE + COMMA_SEP +
                EpisodeEntry.DIRECTORY + TEXT_TYPE + COMMA_SEP +
                EpisodeEntry.LISTENED + " INTEGER" + COMMA_SEP +
                EpisodeEntry.CURRENT_TIME + " INTEGER" +
                ");";

No correct solution

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top