Android SQLite游标选择特定列返回所有字符串类型,而Select*返回正确的类型(字符串、整数等)
我的数据库中有一个整数列,我想获取它的值。使用query()方法getType()返回3(字符串类型),同时getInt()返回19-21之间的数字Android SQLite游标选择特定列返回所有字符串类型,而Select*返回正确的类型(字符串、整数等),android,android-sqlite,android-cursor,Android,Android Sqlite,Android Cursor,我的数据库中有一个整数列,我想获取它的值。使用query()方法getType()返回3(字符串类型),同时getInt()返回19-21之间的数字 String[] columns = {EpisodeEntry.EPISODE_ID, EpisodeEntry.TITLE, EpisodeEntry.DESCRIPTION, EpisodeEntry.PUB_DATE, EpisodeEntry.DURATION, EpisodeEntry.LIST
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)));
使用rawQuery()方法,游标返回1(整数类型),getInt()返回正确的数字
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)));
rawQuery()方法是正确的,但我不知道为什么query()方法是错误的。有人能解释一下吗
我最好使用rawQuery()来避免这样的问题吗?这个问题是我的错(很可能)还是机器人的错(不太可能)
编辑:Hmm,因此我将其与*vs命名列隔离:
这将返回不正确的值“14”:
这将返回正确的值:
Cursor cursor = database.rawQuery("SELECT * FROM episode WHERE directory = \""
+ directory + "\"", null);
模式:
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" +
");";
query()
使用SQLiteQueryBuilder
构建SQL字符串,然后使用rawQuery()
运行它。这里的主要区别是1)列出投影列与选择表达式中的单引号与双引号。您能否共享您的表架构以及其中一个查询是否实际返回任何数据?问题是1,有关更多信息,请参阅我的编辑
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" +
");";