SQLite Cursor Selecting specific columns returns all string types vs Select * returning correct types (String, Integer, etc.)
-
15-10-2022 - |
Pregunta
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 hay solución correcta
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow