2011-12-09 15 views
0

私はデータベースにも関係するAndroidアプリを開発中で、非常に面倒なバグで走ってきました。私はウェブから取った例を取り上げています。Androidデータベースに何も保存されていないのはなぜですか?

以下の例はうまく動作します(ログキャストエラーはありません)。ただし、KEY文字列の内容を変更しようとすると、動作しなくなります。

など。 KEY_LOCATION = "title"をKEY_LOCATION = "title1"に変更すると、DB全体がクラッシュします。

これまで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)でデータを追加したため、データベーステーブルではtitle - body - date_time_value - _idシーケンスの後にデータを挿入することを想定しています。

新しいデータを異なる列名で挿入する前に古いデータベースを削除するか、テーブル名をreminders2に変更して別のテーブルを作成する必要があります。

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

私はそれがうまくいくことを期待しましたが、それは同じことです。名前を変更するだけでなく、他の操作を実行する前にdropTable関数を呼び出すこともできませんでした。 – Eugen

+0

奇妙な奇妙な。前にこのエラーがありましたが、テーブルの列を変更した後にデータベースを空にするのを忘れてしまったためです。エラーのより完全なスタックトレースを投稿できますか?通常、エラーは多少広がっています。エラー挿入date_time_value = test2 body = test1 title1 = test' –

+0

私は完全なエラーログで投稿を編集しました。これが助けてくれることを願って... – Eugen

関連する問題