Android SQLite, как получить конкретный столбец: значение строки - PullRequest
1 голос
/ 11 июля 2011

У меня есть база данных, и я делаю запрос к ней, используя

Cursor mCursor = mapDb.query(MY_TABLE, new String[] {KEY_ONEID, KEY_TWOID}, "trim("+KEY_TWOID + ") != '' ", null, null, null, null);

, что в терминах SQL буквально означает: SELECT OneId, TwoId FROM auth WHERE trim(TwoId) != ''

Использование необработанногоSQL-запрос работает в моем браузере SQLite, чтобы показать мне соответствующие строки, поэтому объект Cursor должен содержать те же результаты.

Во-вторых, в моем java-методе я использую условие, чтобы проверить, имеет ли этот результат что-либо

    if(mCursor.getColumnIndex(KEY_ONEID) > -1)  //if > -1 then the mCursor returned a row
    {

       if(mCursor.getString(mCursor.getColumnIndex(KEY_ONEID)).contains(id)) //breaks here
                return mCursor.getString(mCursor.getColumnIndex(KEY_TWOID));
            else
                return "";
    }

Но по какой-то причине, хотя в хэш-карте mCursor должны быть возвращены все значения, следующий условный оператор

mCursor.getString(mCursor.getColumnIndex(KEY_ONEID)).contains(id)

по-прежнему возвращает: An exception occurred: android.database.CursorIndexOutOfBoundsException

это строка, которая выдает исключение: mCursor.getString(mCursor.getColumnIndex(KEY_ONEID)) и мой следующий элемент в операторе возврата

Я озадачен тем, как тогда получить определенное значение строки!потому что я извлек базу данных и выполнил тот же запрос и ясно вижу, что оба значения, которые я хочу, действительно существуют!

функция Cursor не предоставляет много других способов получения значений, так что пониманиеоценили!

Ответы [ 4 ]

6 голосов
/ 11 июля 2011

Вам нужно поместить курсор в первую строку, прежде чем вы сможете получить данные из него. Для этого вы можете позвонить: mCursor.moveToFirst(). Также этот вызов метода возвращает логическое значение, которое будет ложным, если результатов нет; так что вы также можете использовать его для защиты от этого случая.

Если вам нужно перебрать несколько результатов, то после вызова mCursor.moveToFirst() вы можете использовать метод mCursor.moveToNext(), чтобы просмотреть строки результатов по одной. Еще раз, это возвращает ложь, когда он достигает конца набора данных.

Надеюсь, что это имеет смысл.

2 голосов
/ 27 июня 2012

Вы можете перемещать курсор так, как это ...

Cursor c=dbhelper.getQueById(i);
if(c.getCount()>0)
{
    for(c.moveToFirst();!c.isAfterLast();c.moveToNext())
    {
        txt1.setText(c.getString(0));
        txt2.setText(c.getString(1));
        txt3.setText(c.getString(2));   

    }
}

else
{
    Log.d(" Null value in cursor ", " null ");
}
c.close();
dbhelper.close();
1 голос
/ 11 июля 2011

Попробуйте позвонить mCursor.moveToFirst(), прежде чем пытаться позвонить mCursor.getString.

0 голосов
/ 15 июня 2015

Вам просто нужно вызвать cursor.moveToNext () для перехода к следующему началу с начала, поэтому нам не нужно вызывать moveToFirst.moveToFirst фактически вызывается в середине чего-то.

while (cursor.moveToNext()) {
//whatever you want to do 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...