Удалить конкретную строку из таблицы в SQLite, которая имеет составной первичный ключ - PullRequest
0 голосов
/ 16 марта 2020

Я написал этот код для удаления строки из одной из таблиц в моей базе данных SQLite, которая имеет составной первичный ключ. У меня есть кнопка с изображением в RecyclerView, после нажатия которой нужно выполнить это действие. Но этот код не работает для меня.

Это мой класс адаптера:

public class adapter_cgpa extends RecyclerView.Adapter<adapter_cgpa.Viewholder> {

    ArrayList<POJO> cgpaArrayList;


    public adapter_cgpa(ArrayList<POJO> cgpaArrayList) {
        this.cgpaArrayList = cgpaArrayList;
    }

    @NonNull
    @Override
    public adapter_cgpa.Viewholder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

        View listitem = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_cgpa, parent, false);
        return new Viewholder(listitem);
    }

    @Override
    public void onBindViewHolder(@NonNull adapter_cgpa.Viewholder holder, int position) {

        POJO cgpa= cgpaArrayList.get(position);
        holder.cname.setText(cgpa.getCname());
        holder.no_of_sems.setText(cgpa.getNo_of_sems());
        holder.cgpa.setText(cgpa.getCgpa());
        holder.percentage.setText(cgpa.getPercentage());
        holder.schemec.setText(cgpa.getSchemec());
    }

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

    public class Viewholder extends RecyclerView.ViewHolder {

        TextView cname, no_of_sems, cgpa, percentage,schemec;
        ImageButton btndelete2;


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

            cname=(TextView)itemView.findViewById(R.id.name);
            no_of_sems=(TextView)itemView.findViewById(R.id.no_of_sem);
            cgpa=(TextView)itemView.findViewById(R.id.textView49);
            percentage=(TextView)itemView.findViewById(R.id.textView55);
            schemec=(TextView)itemView.findViewById(R.id.scheme2);
            btndelete2=(ImageButton)itemView.findViewById(R.id.btndelete2);

            final String snc = (String) cname.getText();
            final String semrc = (String) no_of_sems.getText();
            final String schc = (String)  schemec.getText();

            btndelete2.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    dbmanager db= new dbmanager(v.getContext());
                    db.delete2(snc,semrc,schc);
                }
            });
        }
    }
}

Это мой класс dbmanager:

public class dbmanager extends SQLiteOpenHelper {

    String sgpa_table="create table Sgpa (sname text, semester text, sgpa  text,percent text, schemes text, primary key(sname,semester,schemes))";
    String cgpa_table="create table Cgpa (cname text, no_of_sems int, cgpa text, percentage text, schemec text, primary key(cname,no_of_sems,schemec))";

    public dbmanager(@Nullable Context context) {
        super(context, "Student", null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(sgpa_table);
        db.execSQL(cgpa_table);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }


    public Cursor fetch_data1() {
        SQLiteDatabase db = this.getWritableDatabase();
        String query = "Select*FROM Sgpa" ;
        Cursor cursor = db.rawQuery(query,null);

        return cursor;
    }

    public Cursor fetch_data2() {
        SQLiteDatabase db = this.getWritableDatabase();
        String query = "Select*FROM Cgpa" ;
        Cursor cursor = db.rawQuery(query,null);
//        if (cursor != null) {
//            cursor.moveToFirst();
//        }
        return cursor;

    }

    public Cursor delete2(String snc, String semrc, String schc){
        SQLiteDatabase db=this.getWritableDatabase();
        String query= "delete from Cgpa where (cname= ? and no_of_sems = ? and schemec = ?)";
        Cursor cursor = db.rawQuery(query, new String[]{snc,semrc,schc});
        return cursor;
    }
}

1 Ответ

0 голосов
/ 16 марта 2020

Почему вы используете rawQuery() для удаления строк из таблицы? Используйте delete() следующим образом:

public boolean delete2(String snc, String semrc, String schc){
    SQLiteDatabase db = this.getWritableDatabase();
    int result = db.delete("Cgpa", "cname= ? and no_of_sems = ? and schemec = ?", new String[] {snc, semrc, schc});
    return result > 0;
}

Метод возвращает значение boolean: true, если какая-либо строка была удалена, или false.

...