7

嘿,我是一个新手 Androidian,希望得到一些帮助吗?

android.database.sqlite.SQLiteException:没有这样的列:asd:,编译时:DELETE FROM labels WHERE name=asd

这是我面临的错误,这是代码:

这是 DBhelper 中的方法:

/**
 * Delete a label table
 * */
public void deleteLabel(String label) {
    SQLiteDatabase db = this.getWritableDatabase();

    // ContentValues values = new ContentValues();
    // values.remove(label);

    // Deleting Row
    db.delete(TABLE_LABELS, KEY_NAME + "=" + label, null);
    db.close(); // Closing database connection
}

这是调用该方法的主要活动代码:

// for spinner onItemListener
// and here is what label is

final String label = parent.getItemAtPosition(position).toString();

Button dialogDeletelButton = (Button) dialog
                .findViewById(R.id.deleteButton);
        dialogDeletelButton.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // database handler
                DatabaseHandler db = new DatabaseHandler(
                        getApplicationContext());

                // inserting new label into database
                db.deleteLabel(label);

                // Hiding the keyboard
                InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(inputLabel.getWindowToken(), 0);

                // loading spinner without the deleted data
                loadSpinnerData();

            }
        });
4

1 回答 1

14

您几乎肯定需要引用'asd'(即label代码中的变量)。如果它被引用,它是一个与列进行比较的字符串name

如果它没有被引用,SQL 只是把它当作另一个列名。

你可以在你的活动中这样做:

db.deleteLabel ("'" + label + "'");

但更改辅助函数可能更简洁:

db.delete (TABLE_LABELS, KEY_NAME + "='" + label + "'", null);

因为看起来您可能想在其中的某个位置使用未引用的标签做一些事情(ContentValues当前被注释掉的东西)。

于 2012-11-01T08:57:11.093 回答