Извлечение данных из базы данных SQLite в Android?

#android #sqlite

#Android #sqlite

Вопрос:

Здесь я извлекаю данные из SQLite в Android, но проблема в том, что в базе данных всего 20 столбцов, и она правильно извлекает 19 столбцов, но когда я извлекаю последний 20-й столбец, весь массив [] пуст

Например, когда я пишу запрос

 SELECT NEW_ANIMAL_ID,TAG_NO,FARMER_ID,ANIMAL_EAR_POSITION,ANIMAL_SPECIES,ANIMAL_BREED,ANIMAL_BODY_COLOR,ANIMAL_SHAPE_RIGHT,ANIMAL_SHAPE_LEFT,ANIMAL_SWITCH_OF_TAIL,AGE_YEARS,ANIMAL_OTHER_MARKS,PRAG_STATUS,NUMBER_OF_LACTATION,CURRENT_MILK,SUM_INSURED,TAG_IMAGE,HEAD_IMAGE,LEFT_SIDE_IMAGE,RIGHT_SIDE_IMAGE  FROM  ANIMAL_SYNC_TABLE    ORDER BY  NEW_ANIMAL_ID   DESC
  

его столбец fetch 19 полностью

но когда я добавил имя последнего столбца и попытался извлечь его, отображается пустой массив []

 Query = SELECT NEW_ANIMAL_ID,TAG_NO,FARMER_ID,ANIMAL_EAR_POSITION,ANIMAL_SPECIES,ANIMAL_BREED,ANIMAL_BODY_COLOR,ANIMAL_SHAPE_RIGHT,ANIMAL_SHAPE_LEFT,ANIMAL_SWITCH_OF_TAIL,AGE_YEARS,ANIMAL_OTHER_MARKS,PRAG_STATUS,NUMBER_OF_LACTATION,CURRENT_MILK,SUM_INSURED,TAG_IMAGE,HEAD_IMAGE,LEFT_SIDE_IMAGE,RIGHT_SIDE_IMAGE,TAIL_IMAGE_1  FROM  ANIMAL_SYNC_TABLE    ORDER BY  NEW_ANIMAL_ID   DESC
  

Вот код создания таблицы

 db.execSQL("create table "   TABLE_NAME_ANIMAL_SYNC   "(NEW_ANIMAL_ID INTEGER PRIMARY KEY AUTOINCREMENT,FARMER_ID INT,TAG_NO TEXT,ANIMAL_EAR_POSITION TEXT,ANIMAL_SPECIES TEXT,ANIMAL_BREED TEXT,ANIMAL_BODY_COLOR TEXT,ANIMAL_SHAPE_RIGHT TEXT,ANIMAL_SHAPE_LEFT TEXT,ANIMAL_SWITCH_OF_TAIL TEXT,AGE_YEARS NUMBER,ANIMAL_OTHER_MARKS NUMBER,PRAG_STATUS NUMBER,NUMBER_OF_LACTATION NUMBER,CURRENT_MILK NUMBER,SUM_INSURED NUMBER,TAG_IMAGE BLOB NOT NULL,HEAD_IMAGE BLOB NOT NULL,LEFT_SIDE_IMAGE BLOB NOT NULL,RIGHT_SIDE_IMAGE BLOB NOT NULL,TAIL_IMAGE_1 BLOB NOT NULL)");
  

Вот код базы данных

  public List<DataModel> getAllData() {
        List<DataModel> data = new ArrayList<>();
        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery("SELECT NEW_ANIMAL_ID,TAG_NO,FARMER_ID,ANIMAL_EAR_POSITION,ANIMAL_SPECIES,ANIMAL_BREED,ANIMAL_BODY_COLOR,ANIMAL_SHAPE_RIGHT,ANIMAL_SHAPE_LEFT,ANIMAL_SWITCH_OF_TAIL,AGE_YEARS,ANIMAL_OTHER_MARKS,PRAG_STATUS,NUMBER_OF_LACTATION,CURRENT_MILK,SUM_INSURED,TAG_IMAGE,HEAD_IMAGE,LEFT_SIDE_IMAGE,RIGHT_SIDE_IMAGE,TAIL_IMAGE_1  FROM  ANIMAL_SYNC_TABLE    ORDER BY  NEW_ANIMAL_ID   DESC", null);
        StringBuffer stringBuffer = new StringBuffer();
        DataModel dataModel = null;

        if (cursor.moveToFirst()) {
            do {
                dataModel = new DataModel();


                int NEW_ANIMAL_ID = cursor.getInt(cursor.getColumnIndexOrThrow("NEW_ANIMAL_ID"));
                String TAG_COLUMN_1 = cursor.getString(cursor.getColumnIndexOrThrow("TAG_NO"));
                String FARMER_ID_1 = cursor.getString(cursor.getColumnIndexOrThrow("FARMER_ID"));
                String ANIMAL_EAR_POSITION_COLUMN_1 = cursor.getString(cursor.getColumnIndexOrThrow("ANIMAL_EAR_POSITION"));
                String ANIMAL_SPECIES_COLUMN_1 = cursor.getString(cursor.getColumnIndexOrThrow("ANIMAL_SPECIES"));
                String ANIMAL_BREED_COLUMN_1 = cursor.getString(cursor.getColumnIndexOrThrow("ANIMAL_BREED"));
                String ANIMAL_BODY_COLOR_COLUMN_1 = cursor.getString(cursor.getColumnIndexOrThrow("ANIMAL_BODY_COLOR"));
                String ANIMAL_SHAPE_RIGHT_COLUMN_1 = cursor.getString(cursor.getColumnIndexOrThrow("ANIMAL_SHAPE_RIGHT"));
                String ANIMAL_SHAPE_LEFT_COLUMN_1 = cursor.getString(cursor.getColumnIndexOrThrow("ANIMAL_SHAPE_LEFT"));
                String ANIMAL_SWITCH_OF_TAIL_COLUMN_1 = cursor.getString(cursor.getColumnIndexOrThrow("ANIMAL_SWITCH_OF_TAIL"));
                String AGE_COLUMN_1 = cursor.getString(cursor.getColumnIndexOrThrow("AGE_YEARS"));
                String ANIMAL_OTHER_MARKS_COLUMN_1 = cursor.getString(cursor.getColumnIndexOrThrow("ANIMAL_OTHER_MARKS"));
                String PRAG_STATUS_COLUMN_1 = cursor.getString(cursor.getColumnIndexOrThrow("PRAG_STATUS"));
                String NUMBER_OF_LACTATION_COLUMN_1 = cursor.getString(cursor.getColumnIndexOrThrow("NUMBER_OF_LACTATION"));
                String CURRENT_MILK_COLUMN_1 = cursor.getString(cursor.getColumnIndexOrThrow("CURRENT_MILK"));
                String SUM_INSURED_COLUMN_1 = cursor.getString(cursor.getColumnIndexOrThrow("SUM_INSURED"));


                dataModel.setAnimal_id(NEW_ANIMAL_ID);
                dataModel.setFarmer_id(FARMER_ID_1);
                dataModel.setTag_no(TAG_COLUMN_1);
                dataModel.setEar_position(ANIMAL_EAR_POSITION_COLUMN_1);
                dataModel.setAnimal_species(ANIMAL_SPECIES_COLUMN_1);
                dataModel.setAnimal_breed(ANIMAL_BREED_COLUMN_1);
                dataModel.setBody_color(ANIMAL_BODY_COLOR_COLUMN_1);
                dataModel.setShape_right(ANIMAL_SHAPE_RIGHT_COLUMN_1);
                dataModel.setShape_left(ANIMAL_SHAPE_LEFT_COLUMN_1);
                dataModel.setTail_switch(ANIMAL_SWITCH_OF_TAIL_COLUMN_1);
                dataModel.setAge(AGE_COLUMN_1);
                dataModel.setOther_marks(ANIMAL_OTHER_MARKS_COLUMN_1);
                dataModel.setPrag_status(PRAG_STATUS_COLUMN_1);
                dataModel.setLactations(NUMBER_OF_LACTATION_COLUMN_1);
                dataModel.setMilk_qty(CURRENT_MILK_COLUMN_1);
                dataModel.setSum_insured(SUM_INSURED_COLUMN_1);
                dataModel.setTag_photo(Utils.getBitmapFromByte(cursor.getBlob(cursor.getColumnIndex("TAG_IMAGE"))));
                dataModel.setHead_photo(Utils.getBitmapFromByte(cursor.getBlob(cursor.getColumnIndex("HEAD_IMAGE"))));
                dataModel.setLeft_photo(Utils.getBitmapFromByte(cursor.getBlob(cursor.getColumnIndex("LEFT_SIDE_IMAGE"))));
                dataModel.setRight_photo(Utils.getBitmapFromByte(cursor.getBlob(cursor.getColumnIndex("RIGHT_SIDE_IMAGE"))));
                dataModel.setSwitch_Tail_Photo(Utils.getBitmapFromByte(cursor.getBlob(cursor.getColumnIndex("TAIL_IMAGE_1"))));


                stringBuffer.append(dataModel);
                data.add(dataModel);

            } while (cursor.moveToNext());

        }

        return data;
    }
  

Заранее благодарю вас!!!

Комментарии:

1. Какая-либо ошибка в журналах? Вы добавили этот столбец позже? Если да, то удалите сборку и переустановите ее.

2. Используйте этот ПОРЯДОК ВЫБОРА * ИЗ ANIMAL_SYNC_TABLE По NEW_ANIMAL_ID DESC

3. этот столбец не добавлен со всеми столбцами

4. @MohammadAsheri пустой массив[]

5. Запишите это значение cursor.getCount(); и проверьте, сколько записей содержит cursor?

Ответ №1:

Будете ли вы изменять свой код с:

  if (cursor.moveToFirst()) {
            do {
                dataModel = new DataModel();
               ....
        } while (cursor.moveToNext());
  }
  

к этому:

 while(cursor.moveToNext())
{
  dataModel = new DataModel();
  ...

  data.add(dataModel);
}
  

Комментарии:

1. Log : for (DataModel mo : данные) { Log.e(«DataModel», «» mo.getSwitch_Tail_Photo()); } E/ data: [ ]

2. Можете ли вы опубликовать код, в котором вы создали базу данных?

3. Код обновлен @MRah

4. что вы храните в getSwitch_Tail_Photo добавьте код класса DataModel

5. TAIL_IMAGE_1 в getSwitch_Tail_Photo, чтобы проверить, извлекается изображение или нет @SurajVaishnav

Ответ №2:

Измените свой запрос на этот

 SELECT * FROM ANIMAL_SYNC_TABLE ORDER BY NEW_ANIMAL_ID DESC
  

чем проверять, все ли еще существует проблема, чем использовать приложение downlaod по этой ссылке и открыть свою базу данных
в этом приложении на вашем ПК
они запускают ваш запрос на вкладке execute sql и проверяют, правильный запрос или нет

[https://sqlitebrowser.org /]

Комментарии:

1. sqliteviewer.flowsoft7.com Я использую это для проверки SQL-запроса, но он работает нормально, но проблема только в коде Android

2. можете ли вы прислать мне свой файл db «sejpalpavan@gmail.com »

3. отправлено письмо, брат и спасибо

4. да, запрос правильный убедитесь, что у вас есть последняя копия вашей базы данных в папке assets и имя ключа правильное в функции, из которой вы извлекаете данные

5. ya brother все обновлено, но по-прежнему не найдено решения или проблемы, что конкретно происходит не так в коде

Ответ №3:

База данных SQLITE имеет ограниченную поддержку больших двоичных объектов (BLOBS). Существует ограничение в 1 мегабайт для каждой строки данных, и база данных использует нулевые байты для разделения столбцов в хранилище. … Содержит ссылку на отдельную таблицу больших двоичных объектов.