Logcat から次のエラー スタック トレースを取得しています。
SqliteDatabaseCpp(1355): sqlite returned: error code = 1
msg = table my_table has no column named check_box_status,
db=/data/data/com.example.dbtester/databases/my_database
Error inserting check_box_status=1 price=210 check_box_label=testlabel
table my_table has no column named check_box_status: , while compiling:
INSERT INTO my_table(check_box_status,price,check_box_label) VALUES (?,?,?)
以下に示すinsert()メソッドの中間パラメータがnullになっていることが関係しているのではないかと推測していますが、
public void insertNewRow(int checkBoxStatus, String checkBoxLabel, int price){
ContentValues contentValues = new ContentValues();
contentValues.put(KEY_CHECKBOX_STATUS, checkBoxStatus);
contentValues.put(KEY_CHECKBOX_LABEL, checkBoxLabel);
contentValues.put(KEY_PRICE, price);
sqLiteDatabase.insert(MYDATABASE_TABLE, null, contentValues); // <---
}
sqLiteDatabase.insert() の中間パラメーター値に null を設定しましたが、上記のエラーとスタック トレースが表示される理由は、この変数が null であってはならないためである可能性があります。
以下に示す情報から、現在 null になっている中間パラメーター変数に何を入力すればよいでしょうか? sqLiteDatabase.insert(MYDATABASE_TABLE, ?, contentValues);
テーブルの作成に使用される文字列で主キーを明示的に宣言したことに注意してください。「ID INTEGER PRIMARY KEY AUTOINCREMENT」これはエラーと関係があると思います。
データベース初期化コード:
public static final String MYDATABASE_NAME = "my_database";
public static final String MYDATABASE_TABLE = "my_table";
public static final int MYDATABASE_VERSION = 1;
public static final String KEY_CHECKBOX_STATUS = "check_box_status";
public static final String KEY_CHECKBOX_LABEL = "check_box_label";
public static final String KEY_PRICE = "price";
//create table MY_DATABASE (ID integer primary key, Content text not null);
private static final String SCRIPT_CREATE_DATABASE =
"CREATE TABLE IF NOT EXISTS " + MYDATABASE_TABLE + " (" + "ID INTEGER PRIMARY KEY AUTOINCREMENT, " +
"KEY_CHECKBOX_STATUS INTEGER, " + "KEY_CHECKBOX_LABEL TEXT, " + " KEY_PRICE INTEGER" + ");";
SQLiteDatabase sqLiteDatabase;
SQLiteHelper sqLiteHelper;
Context context;
public Database(Context c){
context = c;
sqLiteHelper = new SQLiteHelper(context, MYDATABASE_NAME, null, MYDATABASE_VERSION);
}