2011-12-09 105 views
0

我正在研究一個也涉及數據庫的Android應用程序,並且我運行了一個非常惱人的錯誤。我正在從網上取得一個例子。爲什麼我的Android數據庫沒有存儲任何東西?

下面的例子工作得很好(沒有logcat錯誤)。但是如果我嘗試更改KEY字符串的內容,它將停止工作。

E.g.如果我將KEY_OCATION =「title」更改爲KEY_LOCATION =「title1」,則整個DB崩潰。

我也試過增加迄今沒有成功的數據庫版本號。非常感激任何的幫助。

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) 

回答

1

嘗試改變。

private static final String DATABASE_TABLE="reminders"; 

private static final String DATABASE_TABLE="reminders2"; 
+0

我做到了。它崩潰了,這就是我所說的:D – Eugen

+0

您是否嘗試更改數據庫名稱?而不是表? –

+0

不得不更改表和數據庫名稱。非常感謝你的幫助。這是一個模擬器問題。再次感謝一萬美元 – Eugen

1

這是一個很好的機會已經存在,從早期的測試數據庫中的數據,當您嘗試添加這個新的數據。

由於您使用不同的鍵(標題而不是title1)添加了該數據,因此數據庫表需要您在title - body - date_time_value - _id序列之後插入數據。

您需要在插入具有不同列名的新數據之前刪除舊數據庫,或者通過將表名更改爲像reminders2這樣的代碼來創建不同的表,如Coder所述。

要刪除數據庫,調用此方法:

public void dropTable() { 
     db.execSQL("DROP TABLE IF EXISTS reminders"); 
    } 
+0

Mno ......我希望它能夠工作,但它是一回事。在做任何事情之前更改名稱以及調用dropTable函數都不起作用。 – Eugen

+0

嗯奇怪。我以前有過這個錯誤,但是這是由於我在表格列中做了一些更改後忘記清空我的數據庫。你能發佈一個更完整的堆棧跟蹤的錯誤?通常錯誤是更廣泛的,然後只是'錯誤插入date_time_value = test2身體=測試1標題1 =測試' –

+0

我編輯帖子與我得到的完整的錯誤日誌。希望這有助於... – Eugen

相關問題