Як отримати дані з SQLite?

Я працюю на базі даних sqlite, в якій я впевнений, що я вставив в sqlite правильно. Тепер я витягую дані з sqlite за допомогою курсору, але коли я встановлюю дані в Texview, моя програма падає. Ось мій стіл: тут мій код db:

SQLiteDatabase db = this.getReadableDatabase();
    String query = "SELECT * FROM " + PRODUCT_TABLE + " WHERE ID = 23";
    Cursor cursor = db.rawQuery(query,null);
    return cursor;

Ось мій код курсору:

Cursor cursor = dbHelper.getCheckOutProduct(Id);
        if (cursor != null && cursor.getCount() > 0) {
            do {
                int proId = cursor.getInt(cursor.getColumnIndex("ID"));
                int addressId = cursor.getInt(cursor.getColumnIndex("Price"));
                int paymentTypeID = cursor.getInt(cursor.getColumnIndex("Quantity"));
                int customerID = cursor.getInt(cursor.getColumnIndex("ProductID"));
                Log.e("ProductId",String.valueOf(proId));
            }while (cursor.moveToNext());
        }

Де я помиляюся?

here is my exception

1
Потрібно перемістити курсор з індексу -1 до першого індексу ( Індекс -1, запитав ... ). Крім того, запит не надав жодних результатів ( ... з розміром 0 )
додано Автор Kling Klang, джерело
потрібно перевірити Cursor.getCount ()
додано Автор Mohammod Hossain, джерело
показувати структуру таблиці
додано Автор Mohammod Hossain, джерело
ні, цей код відрізняється від оригіналу: while (c.moveToNext ()) {... працюватиме, але робити {... не буде
додано Автор pskink, джерело
див. мою відповідь вище - просто використовуйте while (c.moveToNext ()) {... , і він працюватиме. код> moveToFirst() - лише один простий while (c.moveToNext ())
додано Автор pskink, джерело
розмістити свій logcat.
додано Автор AIK, джерело
додано Автор AIK, джерело
Я завантажив знімок, який натисніть тут, в моєму виключенні
додано Автор ansar abbas, джерело
див. моє оновлене запитання. я змінив його. тепер я отримую виняток в робити блок
додано Автор ansar abbas, джерело

5 Відповіді

     if (cursor != null && cursor.getCount() > 0) {
           cursor.moveToFirst();
                do {
                    int proId = cursor.getInt(cursor.getColumnIndex("ID"));
                    int addressId = cursor.getInt(cursor.getColumnIndex("Price"));
                    int paymentTypeID = cursor.getInt(cursor.getColumnIndex("Quantity"));
                    int customerID = cursor.getInt(cursor.getColumnIndex("ProductID"));
                    Log.e("ProductId",String.valueOf(proId));
                }while (cursor.moveToNext());
            }
1
додано
Потім потрібно налагодити імена стовпців
додано Автор Mohammod Hossain, джерело
підрахунок також перевищує 0
додано Автор ansar abbas, джерело
SQLiteDatabase db = this.getReadableDatabase();
    String query = "SELECT * FROM " + PRODUCT_TABLE + " where id = 23";
    Cursor cursor = db.rawQuery(query,null);
    return cursor;

це правильний запит, я думаю

1
додано
@ Kishan Singh, вам потрібно перевірити кількість рядків, які повертаються з запиту
додано Автор Mohammod Hossain, джерело
Це той самий код, який опублікував користувач.
додано Автор AIK, джерело
також я спробував цей запит
додано Автор ansar abbas, джерело
  public ArrayList getAllContact(){
    SQLiteDatabase database = getReadableDatabase();
    ArrayList arrayList = new ArrayList();

    Cursor cur = database.rawQuery("select * from " + TABLE_NAME, null);
    cur.moveToFirst();
    while (cur.isAfterLast() == false){
        Contacts cont = new Contacts();
        cont.setId(cur.getInt(cur.getColumnIndex(CUL_ID)));
        cont.setName(cur.getString(cur.getColumnIndex(CUL_NAME)));
        cont.setPhone(cur.getString(cur.getColumnIndex(CUL_PHONE)));
        //cont.setEmail(cur.getString(cur.getColumnIndex(CUL_EMAIL)));

        arrayList.add(cont);


        cur.moveToNext();
    }
    return arrayList;
}
0
додано

Ви повинні робити так

 if (cursor.getCount() > 0) {
        cursor.moveToFirst();
        do {
            int proId = cursor.getInt(cursor.getColumnIndex("ID"));
            int addressId = cursor.getInt(cursor.getColumnIndex("Price"));
            int paymentTypeID = cursor.getInt(cursor.getColumnIndex("Quantity"));
            int customerID = cursor.getInt(cursor.getColumnIndex("ProductID"));
        } while (c.moveToNext());
    }
    c.close();
0
додано

Де ви зберігаєте значення, отримані курсором форми? Для зручності можна створити модель з необхідними атрибутами, встановити її по черзі та повернути список, подібний до цього:

Cursor cursor = dbHelper.getCheckOutProduct(Id);
List values = new ArrayList<>();
    if (cursor != null && cursor.getCount() > 0) {
        do {
            int proId = cursor.getInt(cursor.getColumnIndex("ID"));
            int addressId = cursor.getInt(cursor.getColumnIndex("Price"));
            int paymentTypeID = cursor.getInt(cursor.getColumnIndex("Quantity"));
            int customerID = cursor.getInt(cursor.getColumnIndex("ProductID"));

            Model model = new Model();
            model.setProdId(prodId);
            //just like above line set other desired values.                
            values.add(model);
            Log.e("ProductId",String.valueOf(proId));
        }while (cursor.moveToNext());
    }

    return values;

Сподіваюся, що це допоможе налагодити проблему.

0
додано
android_jobs_ua
android_jobs_ua
120 учасників

Публикуем вакансии и запросы на поиск работы по направлению Android. Здесь всё: full-time, part-time, remote и разовые подработки.

Mobile Dev Jobs UA
Mobile Dev Jobs UA
20 учасників

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin, RN и т.д.