Ошибка обновления SQLite: такого столбца нет: COLUMN_CHECKBOX (код 1): при компиляции: UPDATE - PullRequest
0 голосов
/ 27 августа 2018

Я пытаюсь обновить базу данных SQLite после фильтрации по входным данным. ниже мой код

public void insert_checkbox(String Str1, String chkboxValue){
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put(COLUMN_CHECKBOX, Str1 );

        db.execSQL("UPDATE " + ResturantEntry.TABLE_NAME + " SET COLUMN_CHECKBOX = '" + Str1 + "' WHERE COLUMN_LOCATION = '" + chkboxValue + "'");
        this.getWritableDatabase().insertOrThrow(ResturantContract.ResturantEntry.TABLE_NAME,"",contentValues);


    }
}

мой код создания базы данных в моем SQLiteOpenhelper ниже

р

ublic void onCreate(SQLiteDatabase db) {
        String SQL_CREATE_RESTURANTS_TABLE = "CREATE TABLE " + ResturantEntry.TABLE_NAME + "("`enter code here`
                + ResturantEntry._ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
                + ResturantEntry.COLUMN_NAME + " TEXT,"
                + ResturantEntry.COLUMN_TYPE + " TEXT,"
                + ResturantEntry.COLUMN_ADDRESS + " TEXT,"
                + ResturantEntry.COLUMN_LOCATION + " TEXT,"
                + ResturantEntry.COLUMN_GPSCOORDINATES + " INTEGER,"
                + ResturantEntry.COLUMN_TELEPHONE + " INTEGER,"
                + ResturantEntry.COLUMN_OPENINGHOURS + " INTEGER,"
                + ResturantEntry.COLUMN_CLOSINGHOURS + " INTEGER,"
                + ResturantEntry.COLUMN_CHECKBOX + " TEXT,"
                + ResturantEntry.COLUMN_CHECKBOXVALUE + " TEXT);";


        db.execSQL(SQL_CREATE_RESTURANTS_TABLE);


    }

я продолжаю получать сообщение об ошибке в моем logcat ниже

#################################################################
    Error Code : 1 (SQLITE_ERROR)
    Caused By : SQL(query) error or missing database.
        (no such column: COLUMN_CHECKBOX (code 1): , while compiling: UPDATE Resturant SET COLUMN_CHECKBOX = '1' WHERE COLUMN_LOCATION = 'Ajah')
    #################################################################

Ответы [ 3 ]

0 голосов
/ 27 августа 2018
  1. Если вы хотите обновить строку в БД, вам нужно отфильтровать (используя ее в предложении WHERE) первичный ключ ResturantEntry._ID строки и затем выполнить обновление. У тебя, кажется, этого нет.
  2. Вы смешиваете 2 разных метода для обновления: ContentValues и прямой UPDATE оператор. Вам не нужны оба, выберите один.
0 голосов
/ 27 августа 2018

Пожалуйста, попробуйте обновить код с помощью метода обновления SQLiteDatabase: -

public int insert_checkbox(String Str1, String chkboxValue)
 { 
  SQLiteDatabase db = this.getWritableDatabase(); 
  ContentValues contentValues = new ContentValues(); 
  contentValues.put(COLUMN_CHECKBOX, Str1 ); 
  String selection = ResturantEntry.COLUMN_LOCATION + " =? ";

  String[] selectionArgs = new String[]{chkboxValue};
 //count denotes the number of rows update 
 int count =   db.update(ResturantEntry.TABLE_NAME,   contentValues,selection  ,selectionArgs ); 
 retun count;
}

Надеюсь, это поможет.

0 голосов
/ 27 августа 2018

COLUMN_CHECKBOX - это имя переменной, содержащей имя столбца, а не буквальное имя столбца. Вы не должны помещать это в двойные кавычки в вашем SQL. Та же проблема с COLUMN_LOCATION.

Однако вместо исправления SQL в execSQL() было бы лучше использовать метод SQLiteDatabase update() с ContentValues. Он также обрабатывает такие вещи, как защита от SQL-инъекций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...