0

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);
         }
4

3 に答える 3

2

create の SQL では、値 ( )KEY_CHECKBOX_STATUSではなく列名として入れています。check_box_statustable my_table has no column named check_box_status

したがって、作成は次のようになります。

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" + ");";
于 2013-04-12T07:53:14.453 に答える
2

変数名を引用符で囲んで渡しているため、テーブルの作成構文が間違っています。したがって、作成テーブルを次のように変更します

  "CREATE TABLE IF NOT EXISTS " + MYDATABASE_TABLE + " (" + "ID INTEGER PRIMARY KEY AUTOINCREMENT, " +  
            KEY_CHECKBOX_STATUS+" INTEGER, " + KEY_CHECKBOX_LABEL+" TEXT, " +  KEY_PRICE +" INTEGER" + ");";
于 2013-04-12T07:57:28.803 に答える
1

変化する

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);";
于 2013-04-12T07:57:40.580 に答える