Как вставлять и извлекать данные в SQLite?

#java #android #android-sqlite

#java #Android #android-sqlite

Вопрос:

Я написал приложение, в котором я должен вставить его данные в базу данных sqlite и показать их в одном действии. Но мой код показывает «Запись не найдена», даже если я ее вставил.

Я пробовал использовать различные опции, такие как перемещение курсора сначала к первой записи, а затем с помощью цикла итерации по записи.

Вставка данных в базу данных

 private void saveToDB() {
        SQLiteDatabase database = new ChildMonitoringAppDBHelper(this).getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put(ChildMonitoringAppDBHelper.CHILD_NAME, name.getText().toString());
        values.put(ChildMonitoringAppDBHelper.CHILD_AGE, age.getText().toString());
        values.put(ChildMonitoringAppDBHelper.CHILD_DOB, dob.getText().toString());
        values.put(ChildMonitoringAppDBHelper.CHILD_HEIGHT, height.getText().toString());
        values.put(ChildMonitoringAppDBHelper.CHILD_WEIGHT, weight.getText().toString());
        database.insert(ChildMonitoringAppDBHelper.CHILD_TABLE_NAME, null, values);
        database.close();   
    }
  

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

 public ArrayList<Child> readFromDB()
    {
        ArrayList<Child> List = new ArrayList<>();
        SQLiteDatabase database = new ChildMonitoringAppDBHelper(this).getReadableDatabase();
        Cursor cursor = database.rawQuery("select * from "   ChildMonitoringAppDBHelper.CHILD_TABLE_NAME, null);
        cursor.moveToFirst();
        while(!cursor.isAfterLast())
        {
            Child child = new Child(cursor.getString(cursor.getColumnIndex("CHILD_NAME")), cursor.getString(cursor.getColumnIndex("CHILD_AGE")), cursor.getString(cursor.getColumnIndex("CHILD_DOB")), cursor.getString(cursor.getColumnIndex("CHILD_HEIGHT")), cursor.getString(cursor.getColumnIndex("CHILD_WEIGHT")));
            List.add(child);
            cursor.moveToNext();
        }
        cursor.close();
        return List;
    }
  

Он должен отображать введенную запись, но выдает сообщение «Запись не найдена».

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

1. Вы должны использовать библиотеку сохраняемости Room, которая является оболочкой ORM поверх SQLite, вместо прямого использования SQLite. Смотрите это: youtube.com/watch?v=SKWh4ckvFPM и прочитайте это: developer.android.com/topic/libraries/architecture/room Он менее подвержен ошибкам и проще в использовании. Также читайте здесь: developer.android.com/training/data-storage/sqlite

Ответ №1:

     Cursor cursor = database.rawQuery("select * from "   ChildMonitoringAppDBHelper.CHILD_TABLE_NAME, null);
    if (cursor.moveToFirst())
    {
        do {
            Child child = new Child(cursor.getString(cursor.getColumnIndex("CHILD_NAME")), cursor.getString(cursor.getColumnIndex("CHILD_AGE")), cursor.getString(cursor.getColumnIndex("CHILD_DOB")), cursor.getString(cursor.getColumnIndex("CHILD_HEIGHT")), cursor.getString(cursor.getColumnIndex("CHILD_WEIGHT")));
            List.add(child);
        } while (cursor.moveToNext());
    }
    cursor.close();
    return List;
  

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

Ответ №2:

   public ArrayList<Child> readFromDB() 
   {
  List list = new ArrayList<Child>(); 
  Cursor cursor = database.rawQuery("select * from "   
  ChildMonitoringAppDBHelper.CHILD_TABLE_NAME, null);
  SQLiteDatabase database = this.getWritableDatabase(); 
  Cursor cursor = database.rawQuery(selectQuery, null); 
  if (cursor.moveToFirst())
  {  
  do
  {
 Child child = new Child(cursor.getString(cursor.getColumnIndex("CHILD_NAME")), 
 cursor.getString(cursor.getColumnIndex("CHILD_AGE")), 
 cursor.getString(cursor.getColumnIndex("CHILD_DOB")), 
 cursor.getString(cursor.getColumnIndex("CHILD_HEIGHT")), 
 cursor.getString(cursor.getColumnIndex("CHILD_WEIGHT")));

 list.add(child);
 } 
 while (cursor.moveToNext());
 }
cursor.close(); 
// return list of inserted values
return list; 
}