2012-06-24 2 views
0

Привет всем, я использую класс вспомогательного класса sqlite, но у меня есть небольшая проблема с использованием оператора select. Я хочу получить идентификатор элемента datebase по его названию.Ошибка sqlite Android sqlite при получении данных

Я использую этот выберите метод:

public Cursor selectShift (String name){ 
    SQLiteDatabase db = dbHandler.getReadableDatabase(); 
    Cursor c = db.query(TABLE_NAME, null, "name=" + name, null, null, null, null); 
    c.moveToFirst(); 
    db.close(); 
    return c; 
} 

И когда я называю это я использую это:

if(handler.selectShift(name)!=null){ 
     Cursor c = handler.selectShift(name); 
     id = c.getInt(c.getColumnIndex("_id")); 
     c.close();  
    } 

И тогда получаю эту ошибку:

android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0

Как будто его не существует, но я проверил правильность строки имени, и когда я показываю имена в списке, я вижу это имя, поэтому оно существует.

Может кто-нибудь помочь мне, как это исправить?

+0

я пытался, но та же ошибка – executioner

ответ

0

Спасибо за помощь, я нашел проблему. Именно в методе курсора, решение:

public Cursor selectShift (String name){ 
    SQLiteDatabase db = dbHandler.getReadableDatabase(); 
    Cursor c = db.query(TABLE_NAME, new String[] {"_id"}, "name LIKE '"+name+"%'", null, null, null, null); 
    c.moveToFirst(); 
    db.close(); 
    return c; 
} 
2

1 - там shoudld быть проверить есть ли какие-либо данные в курсора или нет ...... c.getCount> 0 или c.moveToFirst() или c.isAfterLast() .......

if(handler.selectShift(name)!=null){ 
     Cursor c = handler.selectShift(name); 

if (c.moveToFirst()){ //<-------------- 
    do{ //<---------if you not need the loop you can remove that 
     id = c.getInt(c.getColumnIndex("_id")); 
    }while(cursor.moveToNext()); 
} 



    c.close();  

}

2- не уверен, но выглядит в запросе на выборку, как '<variable>' не существует в ИНЕКЕ с переменной

"SELECT COUNT(*) FROM " + tableName + " WHERE " + commentFieldName + " = '" + comment + "'"; 

или better to use parametrized statement

String query = "SELECT COUNT(*) FROM " + tableName + " WHERE columnName = ?"; 
cursor = db.rawQuery(query, new Sring[] {comment}); 
+0

+1 Dheeresh ваши пояснения к ответам очень хорошо. – iNan

+0

Спасибо iNan .... –

+1

привет, когда я использую первый, я не получаю никаких ошибок, но id = ... никогда не вызывал, поэтому я думаю, что проблема находится где-то в методе selectShift (name), но я не знаю почему, у меня есть другой, который почти тот же, selectShift (int id), и он работает, я просто изменил _id в запросе, чтобы назвать – executioner

0

вопрос, как представляется, здесь

"name=" <-It should be "name = "+name 

должно работать

Cursor cursor= db.query(TABLE_IMAGES,null, "name" +" = ?", new String[]{name}, null, null, null); 
+0

нет, это не проблема, одна из них написана правильно, я использовал это в другое приложение без ошибок – executioner

0

Если переменная имя не отформатированы (или не TEXT) для SQL Я предполагаю, что вам нужно небольшая цитата. Возможно, что-то вроде этого

Cursor c = db.query(TABLE_NAME, null, "name= \'" + name + "\'", null, null, null, null); 
Смежные вопросы