7

こんにちは、私は初心者の Androidian です。これについて何か助けていただけませんか?

android.database.sqlite.SQLiteException: そのような列はありません: asd: 、コンパイル中: DELETE FROM ラベル 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 に答える