命令:“从表中删除...”不起作用

时间:2019-05-15 06:16:20

标签: java android android-sqlite

我无法从数据库的表中删除一些数据。

我复制一些SQLite代码并将其粘贴到我的新项目中。这很简单。 我更正了一些代码,但它不起作用。

我花了很多时间来解决这个问题,但我做不到。

甚至没有错误

除了删除查询外,所有其他查询都运行良好。

这是基于android和java。

我试图通过使用这些查询来删除数据。

db.execSQL("DELETE FROM mca WHERE position=" + position + ";");
db.execSQL("DELETE FROM mca WHERE _id=" + id + ";");
db.execSQL("DELETE FROM mca WHERE member='" + member + "';");

我使_id,位置和成员具有相同的值。因此,此代码很有意义。

_id和position为INTEGER,成员为TEXT。

这是MainActivity.java

public class MainActivity extends AppCompatActivity {

    RecyclerView recyclerView;
    MyRecyclerViewAdapter adapter;

    MemberData md;


    @Override
    protected void onCreate(Bundle savedInstanstState) {
        super.onCreate(savedInstanstState);
        setContentView(R.layout.activity_main);
        final DBHelper dbHelper = new DBHelper(getApplicationContext(), "test_alarm.db", null, 1);
        ArrayList<MemberData> member;


        member = new ArrayList<>();

        for (int i = 1; i < 5; i++) {
            try {
                md = new MemberData(member.get(member.size() - 1).position + 1, i + "");

            }catch(Exception e){
                Log.d("error", e+"");
                md = new MemberData(1, i+"");
            }
            member.add(md);
            dbHelper.insert(md);


        }

        /*************** activate delete command ***************/
        dbHelper.delete(2);
        /*******************************************************/

        // set up the RecyclerView
        recyclerView = findViewById(R.id.my_recycler_view);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        adapter = new MyRecyclerViewAdapter(this, member, dbHelper);
        recyclerView.setAdapter(adapter);

    }
}

class MemberData {
    public int position;
    public String member;

    public MemberData(int position, String member) {
        this.member = member;
        this.position = position;
    }
}

这是SQLite函数

public class DBHelper extends SQLiteOpenHelper {

    public DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE mca (_id INTEGER PRIMARY KEY AUTOINCREMENT, member TEXT, position INTEGER);");
    }

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

    }

    public void insert(MemberData md) {
        SQLiteDatabase db = getWritableDatabase();
        db.execSQL("INSERT INTO mca VALUES(null, '" + md.member + "', " + md.position + ");");
        db.close();

    }

    public void delete(int position) {
        SQLiteDatabase db = getWritableDatabase();
        /********************* Delete query *******************/
        db.execSQL("DELETE FROM mca WHERE position=" + position + ";");
        /*******************************************************/

        db.close();
    }

    public ArrayList<MemberData> getData() {
        SQLiteDatabase db = getReadableDatabase();

        ArrayList<MemberData> memberList = new ArrayList<>();

        Cursor cursor = db.rawQuery("SELECT * FROM mca", null);
        while (cursor.moveToNext()) {
            memberList.add(new MemberData(cursor.getInt(1), cursor.getString(2)));
        }
        return memberList;
    }

}

这是RecyclerView的适配器。

public class MyRecyclerViewAdapter extends RecyclerView.Adapter<MyRecyclerViewAdapter.ViewHolder> {

    private ArrayList<MemberData> mData;
    private LayoutInflater mInflater;
    private ItemClickListener mClickListener;
    private DBHelper db;

    // stores and recycles views as they are scrolled off screen
    public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
        TextView myTextView;

        public ViewHolder(View itemView) {
            super(itemView);
            myTextView = itemView.findViewById(R.id.textView);

            itemView.setOnClickListener(this);

        }

        @Override
        public void onClick(View view) {
            if (mClickListener != null) mClickListener.onItemClick(view, getAdapterPosition());
        }
    }

    // data is passed into the constructor
    MyRecyclerViewAdapter(Context context, ArrayList<MemberData> data, DBHelper db) {
        this.mInflater = LayoutInflater.from(context);
        this.mData = data;
        this.db = db;
    }

    // inflates the row layout from xml when needed
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = mInflater.inflate(R.layout.my_text_view, parent, false);
        return new ViewHolder(view);
    }

    // binds the data to the TextView in each row
    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        String member = "member"+mData.get(position).member;
        holder.myTextView.setText(member);
    }

    // total number of rows
    @Override
    public int getItemCount() {
        return mData.size();
    }

    // convenience method for getting data at click position
    String getItem(int id) {
        return mData.get(id).member;
    }

    // allows clicks events to be caught
    void setClickListener(ItemClickListener itemClickListener) {
        this.mClickListener = itemClickListener;
    }

    // parent activity will implement this method to respond to click events
    public interface ItemClickListener {
        void onItemClick(View view, int position);
    }
}

我只想从表中删除某个值

4 个答案:

答案 0 :(得分:6)

您应按以下方式更改sql代码。

sql查询中使用变量时,需要将变量值和sql查询绑定为单个字符串。

尝试下面的代码。

db.execSQL("DELETE FROM mca WHERE position='" + position + "';");
db.execSQL("DELETE FROM mca WHERE _id='" + id + "';");
db.execSQL("DELETE FROM mca WHERE member='" + member + "';"); 

答案 1 :(得分:3)

/

尝试

注意“'”和“;”

答案 2 :(得分:2)

在SQLite查询中使用变量时,请始终使用'。还要删除“;”

例如:您使用过position,因此请定义为

 db.execSQL("DELETE FROM mca WHERE position='" + position + "'");
 db.execSQL("DELETE FROM mca WHERE _id='" + id + "'");
 db.execSQL("DELETE FROM mca WHERE member='" + member + "'");

答案 3 :(得分:1)

使用db.delete,如果失败则返回0,成功则返回

    public int delete(String position) {
    SQLiteDatabase db = getWritableDatabase();
    return db.delete("mca","position = ?",new String[] {position});
    db.close();
    }