Почему моя база данных Android ничего не хранит? - PullRequest
0 голосов
/ 10 декабря 2011

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

Пример ниже работает просто отлично (без ошибок logcat).ОДНАКО, если я пытаюсь изменить содержимое строк KEY, он перестает работать.

Например, если я изменю KEY_LOCATION = "title" на KEY_LOCATION = "title1", вся БД падает.Я также попытался увеличить номер версии БД, но пока безуспешно.Любая помощь будет наиболее ценной.

    private static final String DATABASE_NAME="data";
private static final String DATABASE_TABLE="reminders";
private static final int DATABASE_VERSION=4;

public static final String KEY_LOCATION="title1";
public static final String KEY_BODY="body";
public static final String KEY_DATE_TIME="date_time_value";
public static final String KEY_ROW_ID="_id";

private DatabaseHelper mDbHelper;
private SQLiteDatabase db;

private static final String DATABASE_CREATE =
        "create table " + DATABASE_TABLE + " ( "+
                KEY_ROW_ID+ " integer primary key autoincrement, "+
                KEY_LOCATION+ " text not null, "+
                KEY_BODY+" text not null, "+
                KEY_DATE_TIME+ " text not null);";

private Context mContext;

public DbAdapter(Context c){
    mContext=c;
}


public DbAdapter open() throws android.database.SQLException{
    mDbHelper=new DatabaseHelper(mContext);
    db=mDbHelper.getWritableDatabase();
    return this;
}

public void close(){
    mDbHelper.close();
}

public long createReminder(String title, String body, String dateTime){
    ContentValues initialValues = new ContentValues();
    initialValues.put(KEY_LOCATION, title);
    initialValues.put(KEY_BODY, body);
    initialValues.put(KEY_DATE_TIME, dateTime);

    return db.insert(DATABASE_TABLE, null, initialValues);

}

..................

Вот ошибки, которые я получаю:

    11-29 21:43:02.722: E/SQLiteDatabase(2150):     at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:64)
    11-29 21:43:02.722: E/SQLiteDatabase(2150):     at android.database.sqlite.SQLiteProgram.compileSql(SQLiteProgram.java:146)
    11-29 21:43:02.722: E/SQLiteDatabase(2150):     at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1737)
    11-29 21:43:02.722: E/SQLiteDatabase(2150):     at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1610)
    11-29 21:43:02.722: E/SQLiteDatabase(2150):     at pirelli.app.dbadapter.PirelliDbAdapter.createReminder(PirelliDbAdapter.java:55)
    11-29 21:43:02.722: E/SQLiteDatabase(2150):     at pirelli.app.dbadapter.PirelliDbAdapter.createReminder(PirelliDbAdapter.java:55)
    11-29 21:43:02.722: E/SQLiteDatabase(2150):     at pirelli.app.HSEActivity$1.onClick(HSEActivity.java:149)
    11-29 21:43:02.722: E/SQLiteDatabase(2150):     at android.view.View.performClick(View.java:3110)
    11-29 21:43:02.722: E/SQLiteDatabase(2150):     at android.view.View$PerformClick.run(View.java:11934)
    11-29 21:43:02.722: E/SQLiteDatabase(2150):     at android.os.Handler.handleCallback(Handler.java:587)
    11-29 21:43:02.722: E/SQLiteDatabase(2150):     at android.os.Handler.dispatchMessage(Handler.java:92)

Ответы [ 2 ]

1 голос
/ 10 декабря 2011

Существует большая вероятность того, что в базе данных уже есть данные из более раннего теста, когда вы пытаетесь добавить эти новые данные.

Поскольку вы добавили эти данные с другим ключом (заголовок вместо заголовка1), таблица базы данных ожидает, что вы вставите данные в соответствии с последовательностью title - body - date_time_value - _id.

Вам нужно будет удалить старую базу данных, прежде чем вставлять новые данные с разными именами столбцов, или создать другую таблицу, изменив имя таблицы на что-то вроде reminders2, как сказал Кодер.

Чтобы удалить вашу базу данных, вызовите этот метод:

public void dropTable() {
        db.execSQL("DROP TABLE IF EXISTS reminders");
    }
1 голос
/ 10 декабря 2011

Попробуйте изменить.

private static final String DATABASE_TABLE="reminders";

до

private static final String DATABASE_TABLE="reminders2";
...