Пустая база данных SQL lite после перезапуска приложения - PullRequest
0 голосов
/ 03 октября 2018

После перезапуска приложения моя база данных всегда пуста.

Что я делаю неправильно?

Я все время чистил базу данных?

вот код дляКласс БД ..

import android.content.ContentValues;
    import android.content.Context;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteOpenHelper;
    import android.util.Log;

    import java.sql.Date;
    import java.util.ArrayList;

    import galimski.igor.com.do_ing.Task;
    import galimski.igor.com.do_ing.TaskPriority;


    public class DatabaseHelper extends SQLiteOpenHelper {

        private static final String TAG = "SQLite";

        private static final int DATABASE_VERSION = 1;

        private static final String DATABASE_NAME = "TaskDatabase";

        private static final String TABLE_TASK = "Task";

        private static final String COLUMN_TASK_ID ="Id";
        private static final String COLUMN_TASK_SHORT ="ShortDescription";
        private static final String COLUMN_TASK_FULL = "FullDescription";

        private static final String COLUMN_TASK_CREATIONDATE = "CreatedDate";
        private static final String COLUMN_TASK_COMPLETIONDATE = "CompletionDate";

        private static final String COLUMN_TASK_PRIORITY = "Priority";

        private static final String COLUMN_TASK_SHOWN= "Shown";

        public DatabaseHelper(Context context)  {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
            Log.i(TAG, "MyDatabaseHelper.onCreate ... ");

            //        String script = "CREATE TABLE " + TABLE_NOTE + "("
            //                + COLUMN_NOTE_ID + " INTEGER PRIMARY KEY," + COLUMN_NOTE_TITLE + " TEXT,"
            //                + COLUMN_NOTE_CONTENT + " TEXT" + ")";
            //String script = "CREATE TABLE `Task` ( `Id` INTEGER NOT NULL, `ShortDescription` TEXT NOT NULL, `FullDescription` TEXT, `CreatedDate` TEXT NOT NULL, `CompletionDate` TEXT NOT NULL, `Priority` TEXT NOT NULL, PRIMARY KEY(`Id`) )";

            String script = "CREATE TABLE " + TABLE_TASK + "("
                            + COLUMN_TASK_ID + " INTEGER PRIMARY KEY,"
                            + COLUMN_TASK_SHORT + " TEXT,"
                            + COLUMN_TASK_CREATIONDATE + " TEXT,"
                            + COLUMN_TASK_COMPLETIONDATE + " TEXT,"
                            + COLUMN_TASK_PRIORITY + " TEXT,"
                            + COLUMN_TASK_SHOWN + " TEXT" + ")";

            db.execSQL(script);
        }


        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            Log.i(TAG, "MyDatabaseHelper.onUpgrade ... ");

            if (oldVersion != newVersion) {
                db.execSQL("DROP TABLE IF EXISTS " + TABLE_TASK);
                onCreate(db);
            }

        }

        // Called when the database connection is being configured.
        // Configure database settings for things like foreign key support, write-ahead logging, etc.
        @Override
        public void onConfigure(SQLiteDatabase db) {
            super.onConfigure(db);
            db.setForeignKeyConstraintsEnabled(true);
        }

        public void AddTask(Task task) {
            Log.i(TAG, "MyDatabaseHelper.addTask ... ");

            SQLiteDatabase db = this.getWritableDatabase();

            ContentValues values = new ContentValues();

            values.put(COLUMN_TASK_SHORT, task.GetShortDescription());
            values.put(COLUMN_TASK_FULL, task.GetFullDescription());

            values.put(COLUMN_TASK_CREATIONDATE, task.GetCreatedDate().toString());
            values.put(COLUMN_TASK_COMPLETIONDATE, task.GetCompletionDate().toString());

            values.put(COLUMN_TASK_PRIORITY, task.GetCompletionDate().toString());

            db.insert(TABLE_TASK, null, values);

            db.close();
        }
    }

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

У вас проблема не в том, что база данных удаляется или очищается;это потому, что вставка не будет вставлять какие-либо данные, поскольку вы пытаетесь вставить, используя столбец FullDescription (согласно values.put(COLUMN_TASK_FULL, task.GetFullDescription());). Однако этот столбец не существует в таблице (в соответствии с указанным вами таблицей создания SQL).

Необходимо либо закомментировать, либо удалить строку values.put(COLUMN_TASK_FULL, task.GetFullDescription());

или, если вам нужен столбец, измените

String script = "CREATE TABLE " + TABLE_TASK + "("
                                + COLUMN_TASK_ID + " INTEGER PRIMARY KEY,"
                                + COLUMN_TASK_SHORT + " TEXT,"
                                + COLUMN_TASK_CREATIONDATE + " TEXT,"
                                + COLUMN_TASK_COMPLETIONDATE + " TEXT,"
                                + COLUMN_TASK_PRIORITY + " TEXT,"
                                + COLUMN_TASK_SHOWN + " TEXT" + ")";

на

String script = "CREATE TABLE " + TABLE_TASK + "("
                            + COLUMN_TASK_ID + " INTEGER PRIMARY KEY,"
                            + COLUMN_TASK_SHORT + " TEXT,"
                            + COLUMN_TASK_FULL + " TEXT," 
                            + COLUMN_TASK_CREATIONDATE + " TEXT,"
                            + COLUMN_TASK_COMPLETIONDATE + " TEXT,"
                            + COLUMN_TASK_PRIORITY + " TEXT,"
                            + COLUMN_TASK_SHOWN + " TEXT" + ")";

Если вы измените определение таблицы, добавив столбец, вам потребуется перезапустить приложение, но только после один из следующих действий: -

  1. Удалить данные приложения
  2. Удалить приложение
  3. Изменить private static final int DATABASE_VERSION = 1; на private static final int DATABASE_VERSION = 2;

Это происходит потому, что метод onCreate запускается только один раз при создании базы данных 1 и 2 deleteбаза данных , 3 вызывает метод onCreate с помощью метода onUpgrade

0 голосов
/ 03 октября 2018

Пожалуйста, протестируйте ваше приложение на реальном устройстве Android и проверьте, сохраняется ли та же проблема, и просто перезапустите приложение, не перезапускайте из Android Studio, потому что Android Studio будет переустанавливать приложение каждый раз, когда вы перезапустите его, в результатев пустой базе данных.

1) Запустите приложение на устройстве 2) Добавьте данные в базу данных 3) Закройте приложение 4) Удалите его из последних приложений.5) Перезапустите его из меню не из андроид студии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...