java - 命令: "DELETE FROM Table where ..." doesn't work

标签 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 和位置为 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);
    }
}

我只想从表中删除某个值

最佳答案

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

试试这个

小心“'”和“;”

关于java - 命令: "DELETE FROM Table where ..." doesn't work,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56142791/

相关文章:

java - 将两个 Activity JPanel 层叠在一起

java - 同一服务器中两个 Web 应用程序之间的通信

java - 空指针异常(循环遍历对象数组)

Android ListView 项目更新

java - 使用ORMLite数据库检索数据时内部类始终为空

java - ArrayList 中的继承和对象

android - 相机照片未出现在图库应用程序中

java - 如何将多选对话框转换为单选对话框

android - Room DB升级需要编写完整的插入查询

java - Android - 如何从其他类访问已创建的数据库?