Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android SQLite游标选择特定列返回所有字符串类型,而Select*返回正确的类型(字符串、整数等)_Android_Android Sqlite_Android Cursor - Fatal编程技术网

Android SQLite游标选择特定列返回所有字符串类型,而Select*返回正确的类型(字符串、整数等)

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

我的数据库中有一个整数列,我想获取它的值。使用query()方法getType()返回3(字符串类型),同时getInt()返回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)));
使用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" +
                ");";