Ошибка при попытке обновить существующую строку в базе данных sqlite в Android java? - PullRequest
0 голосов
/ 20 апреля 2020

Я пытаюсь обновить базу данных значением в тексте редактирования. Но я получаю сообщение об ошибке в регистраторе: "*** Процесс: com.example.coursework2, PID: 12430 android .database.sqlite.SQLiteException: нет такого столбца: Word c (код 1 SQLITE_ERROR):, в то время как компиляция: UPDATE Phrases_table SET word = Word WHERE word = Wordc в android .database.sqlite.SQLiteConnection.nativePrepareStatement (собственный метод)

Word c - это слово, хранящееся в базе данных, а "Word" - это значение, которое я пытаюсь обновить базу данных. Я новичок в этом, пожалуйста, помогите. **

// класс базы данных, у меня есть только 1 столбец, который является COL_2

public void updateName(String newName,String oldName) { // issue is here
    SQLiteDatabase db = this.getWritableDatabase();
    String query = "UPDATE " + TABLE_NAME + " SET " + COL_2 + " = " + newName + " WHERE " + COL_2 + " = " + oldName;
    db.execSQL(query);

/ * Редактировать класс, где, когда я нажимаю кнопку «Сохранить», я получаю значение из переключателя и ожидаю, что обновлю базу данных значением в тексте редактирования * /

 buttonSave.setOnClickListener(
            new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    int pos = listView.getCheckedItemPosition();
                    if (pos > -1) {
                        val = list.get(pos).toString(); //getting value from the radio button which is stored in the database

                       String newWord= edit.getText().toString(); //getting text from edit text


                       myDb.updateName( newWord,val ); 

                    }

Ответы [ 2 ]

1 голос
/ 20 апреля 2020

Строковые значения должны быть заключены в одинарные кавычки:

public void updateName(String newName,String oldName) { // issue is here
    SQLiteDatabase db = this.getWritableDatabase();
    String query = "UPDATE " + TABLE_NAME + " SET " + COL_2 + " = '" + newName + "' WHERE " + COL_2 + " = '" + oldName + "'";
    db.execSQL(query);
}

Но вы должны использовать рекомендуемый и более безопасный метод update() с ContentValues и ? плахолдерами:

public void updateName(String newName, String oldName) { // issue is here
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues cv = new ContentValues();
    cv.put(COL_2, newName);
    db.update(TABLE_NAME, cv, COL_2 + "= ?", new String[] {oldName});
    db.close();
}

Таким образом, вам не нужно беспокоиться о добавлении одинарных кавычек или о риске sql инъекции .

0 голосов
/ 20 апреля 2020

Вы передаете собственный запрос напрямую, поэтому вам нужно использовать кавычки для строковых значений:

String query = "UPDATE " + TABLE_NAME + " SET " + COL_2 + " = \"" + newName + "\" WHERE " + COL_2 + " = \"" + oldName + "\""; db.execSQL(query);

Это сгенерирует запрос:

UPDATE Phrases_table SET word = "Word" WHERE word = "Wordc"

...