sqlite: SQLiteDase.query не работает должным образом - PullRequest
1 голос
/ 28 декабря 2011

У меня есть такая таблица:

1|EC7599A156DB1913AD9DE9A3A9540624B05683EC|Bar|World's Greatest|http://www.foo.com
2|EC7599A156DB1913AD9DE9A3A9540624B05683EC|Bar|World's Greatest|http://www.foo.com
3|EC7599A156DB1913AD9DE9A3A9540624B05683EC|Bar|World's Greatest|http://www.foo.com

Схема для таблицы:

CREATE TABLE IRChannels (
    ChannelId INTEGER PRIMARY KEY, 
    ChannelHash BLOB NOT NULL, 
    ChannelTitle TEXT NOT NULL, 
    ChannelDesc TEXT, 
    ChannelLink TEXT);

Я пытаюсь выполнить оператор SELECT, используя следующий код:

if (mReadDatabase != null) {
     String[]   columns = new String[]{COL_CHANNEL_ID};
     String     selection = COL_CHANNEL_HASH + "='" + hash + "'";
     try {
         Cursor cursor = mReadDatabase.query(
             TABLE_CHANNELS_NAME,      // Table Name 
             columns,                  // Channel ID
             selection,                // WHERE ChannelHash
             null,                     // = hash
             null,                     // Don't  Group
             null,                     // Don't filter by Groups
             null,                     // Use default Sort Order
             String.valueOf(1));       // LIMIT 1

         if (cursor.moveToFirst()) {
             return cursor;
         } else 
             return null;
    }

Проблема в том, что я никогда не вижу никаких данных в возвращенном курсоре.Если я попробую следующую команду в оболочке sqlite3, я смогу получить данные:

select channelid 
from irchannels 
where channelhash='EC7599A156DB1913AD9DE9A3A9540624B05683EC' 
limit 1

Чего мне не хватает?

ОБНОВЛЕНИЕ: Iпопытался изменить мой код на использование необработанного запроса, так что без разницы:

if (mReadDatabase != null) {
    String        selection = COL_CHANNEL_HASH + "='" + hash + "'";
    final String  rawQuery = "SELECT " + COL_CHANNEL_ID +  
                " FROM " + TABLE_CHANNELS_NAME + " " + 
                " WHERE " + selection + 
                " LIMIT 1;";
        Cursor cursor = mReadDatabase.rawQuery(rawQuery, null);
}

Ответы [ 2 ]

1 голос
/ 28 декабря 2011

Попробуйте,

String[]   columns = new String[]{COL_CHANNEL_ID};

Cursor cursor = mReadDatabase.query(
             TABLE_CHANNELS_NAME,      // Table Name 
             columns,                  // Channel ID
             "column_name=?",                // WHERE ChannelHash
             new String[]{hash},                     // = hash
             null,                     // Don't  Group
             null,                     // Don't filter by Groups
             null,                     // Use default Sort Order
             String.valueOf(1));       // LIMIT 1
0 голосов
/ 28 декабря 2011

Где-то я читал, что для Android требуется специальное имя поля id. Вы можете получить его как в примере:

public static final String COL_CHANNEL_ID = BaseColumns._ID;

И схема должна быть следующей в вашем случае:

CREATE TABLE IRChannels (
    _id INTEGER PRIMARY KEY, 
    ChannelHash BLOB NOT NULL, 
    ChannelTitle TEXT NOT NULL, 
    ChannelDesc TEXT, 
    ChannelLink TEXT);

Поскольку BaseColumns._ID обычно равен "_id"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...