Как я могу удалить данные в базе данных? - PullRequest
0 голосов
/ 26 июня 2019

android.database.sqlite.SQLiteException: такого столбца нет: pos (код 1 SQLITE_ERROR): при компиляции: DELETE FROM pre_table WHERE _id = pos;

Я пробую несколько вещей. Но это не работает.

enter code here
/* Main Activity */

// member
Context context;
ContentValues value = new ContentValues();
ListView listView;
PreviewDBHelper dbHelper;
PreviewDBManager previewDBManager;
Cursor cursor = null;
AlertDialog.Builder builder;
private ArrayList<Preview> list = null;
private newAdapter myAdapter;
private mood_dialog mCustomDialog;
private weather_dialog wCustomDialog;
EditText etTitle;
EditText etContent;


AdapterView.OnItemLongClickListener longClickListener
        = new AdapterView.OnItemLongClickListener() {
    @Override
    public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
        // remove data
        final Integer selectedPos = position;

        SQLiteDatabase db = dbHelper.getWritableDatabase();
        String pos = list.get(selectedPos).toString();

        list.get(position);
        db.execSQL("DELETE FROM " + PreviewDBHelper.TABLE_NAME
                + " WHERE _id = pos;");
        Toast.makeText(getApplicationContext(), "삭제 되었습니다", Toast.LENGTH_LONG).show();
        dbHelper.close();
        myAdapter.notifyDataSetChanged();

        return true;
    }


};

// DBHelper открытый класс PreviewDBHelper расширяет SQLiteOpenHelper {

final static String TAG = "PreviewDBHelper";

final static String DB_NAME = "preview.db";
public final static String TABLE_NAME = "pre_table";

public final static String COL_ID = "_id";
public final static String COL_TITLE = "title";
public final static String COL_WEATHER = "weather";

public PreviewDBHelper(Context context) {
    super(context, DB_NAME, null, 1);
}


@Override
public void onCreate(SQLiteDatabase db) {
    String sql = "CREATE TABLE " + TABLE_NAME + " (" + COL_ID + " integer primary key autoincrement, " +
            COL_TITLE + " TEXT, " + COL_WEATHER + " TEXT)";
    Log.d(TAG, sql);
    db.execSQL(sql);

}

}

Я хочу удалить данные, когда долго нажимаю на свой список

Ответы [ 2 ]

0 голосов
/ 26 июня 2019

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

db.execSQL("DELETE FROM " + PreviewDBHelper.TABLE_NAME + " WHERE _id = " + pos);

Однако, как вы сказали, список не обновляется. Это происходит потому, что вы также должны удалить элемент в адаптере.

Итак, я предлагаю следующие изменения:

@Override
public boolean onItemLongClick(....) {

    // Delete using db.delete. This way, you can confirm the number of rows deleted
    int rowsDeleted = db.delete(PreviewDBHelper.TABLE_NAME, "_id=?", new String[]{Integer.toString(pos)});

    if(rowsDeleted > 0) {
        // Remove the item from the list. Adapter render items according to the items in your list (and not according to the items in the database)
        list.remove(pos);

        // Then, notify the adapter that the list was changed
        myAdapter.notifyDataSetChanged();
    }
}
0 голосов
/ 26 июня 2019

Вы пытаетесь удалить "pos", так что, я думаю, ваша проблема в этой строке

db.execSQL("DELETE FROM " + PreviewDBHelper.TABLE_NAME
            + " WHERE _id = pos;");

должно быть

db.execSQL("DELETE FROM " + PreviewDBHelper.TABLE_NAME
            + " WHERE _id = " +pos);

Итак, вы удаляете позицию.

Отличная идея, что вы можете использовать этот метод, чтобы быть более понятным при удалении материала

https://stackoverflow.com/a/17917422/4385913

Редактировать

Но все равно не удаляется на экране

Возможно, вы можете использовать myAdapter.notifyItemRemoved(position); Или просто удалите его из списка, а затем используйте метод notifyDataSetChanged() из вашего адаптера.

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