2011-12-09 141 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

相关问题