私はデータベースにも関係する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)
私がやった:あなたのデータベースをドロップし、このメソッドを呼び出すこと
。そして、クラッシュする、それは私が言っていることです:D – Eugen
あなたはデータベース名を変更しようとしましたか?代わりにテーブル? –
テーブルとデータベースの両方の名前を変更する必要がありました。あなたの助けに感謝します。それはエミュレータの問題でした。お返事ありがとうございました – Eugen