Как удалить данные из базы данных SQLITE по идентификатору - PullRequest
0 голосов
/ 10 февраля 2020

У меня много проблем с поиском, как удалить данные из моей базы данных sqlite, используя ID. Как мне удалить данные из моей базы данных sqlite, используя ID?

final ItemTouchHelper.SimpleCallback itemTouchHelper = new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT) {
    @Override
    public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
        return false;
    }



    @Override
    public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
        list.remove(viewHolder.getAdapterPosition());
        adapter.notifyDataSetChanged();

         /////// I want to delete this data from my sqlite Data Base by using it's id. But how do I get the id?///////

    }
};

Должно ли это быть сделано в OnBindViewHolder?

 @Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
    holder.notePadTextView.setText(arrayListNote.get(position).getNote());
}

Это мой пользовательский адаптер:

publi c Класс NotesCustomAdapter расширяет RecyclerView.Adapter {private ArrayList arrayListNote; контекст частного контекста;

public NotesCustomAdapter(ArrayList<newNote> arrayListNote, Context context) {
    this.arrayListNote = arrayListNote;
    this.context = context;
}

@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.notepad_model,parent,false);
    ViewHolder holder = new ViewHolder(view);
    return holder;
}

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
    holder.notePadTextView.setText(arrayListNote.get(position).getNote());
}

@Override
public int getItemCount() {
    return arrayListNote.size();
}

public class ViewHolder extends RecyclerView.ViewHolder{

    LinearLayout NotePadMode;
    TextView notePadTextView;

    public ViewHolder(@NonNull View itemView) {
        super(itemView);

        NotePadMode= itemView.findViewById(R.id.NotePadModel);
        notePadTextView = itemView.findViewById(R.id.notePadTextView);
    }
}

}

Это моя база данных SQlite:

public class DataBaseHelper extends SQLiteOpenHelper {
public static final String DATABSE_NAME = "AllWorkHours.db";
public static final String TABLE_NAME = "ALLWORKHOURS";
public static final String COL_0 =  "ID";
public static final String COL_1 =  "DATE";
public static final String COL_2 =  "TIMESHIFTSTART";
public static final String COL_3 =  "TIMESHIFTENDS";
public static final String COL_4 =  "NOTES";
public static final String COL_5 =  "NOTEMEMOS";
public static final int DATABASE_Version = 5;

public DataBaseHelper(Context context) {
    super(context, DATABSE_NAME,null,DATABASE_Version);
}

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("CREATE TABLE " + TABLE_NAME + "(ID INTEGER PRIMARY KEY AUTOINCREMENT, DATE TEXT, TIMESHIFTSTART INTEGER, TIMESHIFTENDS TEXT, NOTES TEXT, NOTEMEMOS TEXT)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS ALLWORKHOURS");
    onCreate(db);
}

public boolean addHours(String Date, String TimeShiftStart, String TimeShiftEnds, String Notes){
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues contentValues = new ContentValues();
    contentValues.put(COL_1, Date);
    contentValues.put(COL_2, TimeShiftStart);
    contentValues.put(COL_3, TimeShiftEnds);
    contentValues.put(COL_4, Notes);
    long inserted = db.insert(TABLE_NAME,null,contentValues);

    if (inserted == -1){
        return false;
    }else{
        return true;
    }
}

public ArrayList<newShift> viewAllHours(){
    ArrayList<newShift> arrayList = new ArrayList<>();
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_NAME, null);

    while(cursor.moveToNext()){
        int id = cursor.getInt(0);
        String Date = cursor.getString(1);
        String timestart = cursor.getString(2);
        String timeEnds = cursor.getString(3);
        String notes = cursor.getString(4);

        newShift newShift = new newShift(id,Date,timestart,timeEnds,notes);

        arrayList.add(newShift);
    }
    return arrayList;
}

public boolean addNotes(String NOTEMEMOS) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues contentValues = new ContentValues();
    contentValues.put(COL_5, NOTEMEMOS);
    long inserted = db.insert(TABLE_NAME, null, contentValues);

    if (inserted == -1){
        return false;
    }else{
        return true;
    }
}

public  ArrayList<newNote> ViewAllNotes() {
    ArrayList<newNote> arrayList = new ArrayList<>();
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery("SELECT NOTEMEMOS FROM " + TABLE_NAME, null);


    while(cursor.moveToNext()){
        String notes = cursor.getString(0);
        newNote newnote = new newNote(notes);
        arrayList.add(newnote);
    }
    return arrayList;
}

}

Ответы [ 2 ]

1 голос
/ 10 февраля 2020

Вы можете попробовать это

db.delete(table, whereClause, whereArgs)

после удаления записи, обновить sh ваш вид (просмотр списка)

0 голосов
/ 10 февраля 2020

Вы должны получить идентификатор своей модели перед удалением, например:

newShift obj = list.get(viewHolder.getAdapterPosition());
DataBaseHelper _yourdatabaseObject = youtDatabaseInstance();
 _yourdatabaseObject.removeDataByID(""+obj.id);


 list.remove(viewHolder.getAdapterPosition());
 adapter.notifyDataSetChanged();

Создать функцию удаления заметки в DataBaseHelper.

public void deleteMyNote(String id){
  SQLiteDatabase db = this.getWritableDatabase();
  db.execSQL("delete from "+ TABLE_NAME +" where ID='"+ id +"'");
}
...