Как получить данные из SQLite в Android - PullRequest
0 голосов
/ 15 сентября 2018

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

Вот мой код курсора:

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

А вот мой код в действии, откуда я получаю данные из базы данных

dbHelper = new DBHelper(context);
    Cursor c = dbHelper.getCheckOutProduct();
    if (c != null){
        while (c.moveToNext()) {
            int Id = c.getInt(0);
            int paymentTypeID = c.getInt(1);
            int customerID = c.getInt(2);
         }
        }

Где я делаю ошибку? Заранее спасибо вот мое исключение

Ответы [ 3 ]

0 голосов
/ 16 сентября 2018

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

||========================================||
|| ORDER_TABLE                            ||
||========================================||
||  ID                                    ||
||  AddressID                             ||
||  PaymentTypeID                         ||
||  CustomerID                            ||
||========================================||

поместите эту функцию в класс DBHelper

public ArrayList<Map<String, String>> getorder()
{
    ArrayList<Map<String, String>> array_list = new ArrayList<>();

    SQLiteDatabase db = this.getReadableDatabase();
    Cursor res =  db.rawQuery("select * from " + ORDER_TABLE + " ORDER BY ID DESC LIMIT 1 " , null);
    res.moveToFirst();

    while(res.isAfterLast() == false){
        Map<String, String> datanum = new HashMap<String, String>();
        datanum.put("ID", res.getString(res.getColumnIndex("ID")));
        datanum.put("AddressID", res.getString(res.getColumnIndex("AddressID")));
        datanum.put("PaymentTypeID", res.getString(res.getColumnIndex("PaymentTypeID")));
        datanum.put("CustomerID", res.getString(res.getColumnIndex("CustomerID")));
        array_list.add(datanum);
        res.moveToNext();
    }
    return array_list;
}

и этот код для извлечения данных из DBHelper

    DB = new DBHelper(this);
    ArrayList<Map<String, String>> order = DB.getorder();


  String ID;
  String AddressID;
  String PaymentTypeID;
  String CustomerID;

    try {
    if(order.size() = 0){
        //database is empty
    } else {
         ID            = order.get(0).get("ID");
         AddressID     = order.get(0).get("AddressID");
         PaymentTypeID = order.get(0).get("PaymentTypeID");
         CustomerID    = order.get(0).get("CustomerID");
    }
  }catch (IndexOutOfBoundsException e){
    Toast.makeText(this,"ERROR IndexOutOfBoundsException :. "+ e ,Toast.LENGTH_LONG).show();
  }

и если у вас много заказов

вы можете за цикл

 for (int i= 0 ; i< order.size();i++){
         ID_list            = order.get(i).get("ID");
         AddressID_list     = order.get(i).get("AddressID");
         PaymentTypeID_list = order.get(i).get("PaymentTypeID");
         CustomerID_list    = order.get(i).get("CustomerID");
}

я думаю, что вы знаете остальную часть

Я надеюсь, что это поможет вам

0 голосов
/ 17 сентября 2018

Ваш вопрос в том, что вы выбрали все столбцы по

String query = "SELECT * FROM " + ORDER_TABLE + " ORDER BY ID DESC LIMIT 1 ";

Но вы не получили индекс столбца для AddressId column

Изменение

dbHelper = new DBHelper(context);
Cursor c = dbHelper.getCheckOutRequest();
if (c != null){
    while (c.moveToNext()) {
        int Id = c.getInt(0);
        int paymentTypeID = c.getInt(1);
        int customerID = c.getInt(2);
     }
    }

К

dbHelper = new DBHelper(context);
Cursor c = dbHelper.getCheckOutRequest();
if (c != null){
    while (c.moveToNext()) {
        int Id = c.getInt(0);
        int AddressID = c.getInt(1);
        int paymentTypeID = c.getInt(2);
        int customerID = c.getInt(3);
     }
    }
0 голосов
/ 15 сентября 2018

Возможно, потому что вы разыгрываете String на int, попробуйте это -

int Id = 0;
int paymentTypeID = 0;
int customerID = 0;

dbHelper = new DBHelper(context);
    Cursor c = dbHelper.getCheckOutRequest();
    if (c != null){
        while (c.moveToNext()) {
             Id = c.getInt(0);
             paymentTypeID = c.getInt(1);
             customerID = c.getInt(2);
     }
        }

Затем в Textview,

textView.setText(String.valueOf(Id));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...