【问题标题】:delete a row using column field name - SQlite (SQLiteOpenHelper Android)使用列字段名称删除一行 - SQlite (SQLiteOpenHelper Android)
【发布时间】:2020-09-10 10:05:08
【问题描述】:

我需要删除数据库中的一行(SQLite)

我正在尝试使用文件名删除一行。文件是数据库列中的一个字段。

public void deleteRow (String file){
    SQLiteDatabase db = this.getWritableDatabase();
    db.delete("checkList", "DELETE FROM checkList Where file = "+file, null);
}

我得到的是:

进程:com.example.operacioneschecklist,PID:29351 android.database.sqlite.SQLiteException:靠近“DELETE”:语法错误(代码 1 SQLITE_ERROR[1]):,编译时:DELETE FROM checkList WHERE DELETE FROM checkList Where file = SE 062 Merlo20:05:23:12.txt

这是我实现的类代码:

class MyDB extends SQLiteOpenHelper {

    private static final int VERSION_BASEDATOS = 1;

    private static final String NAME = "checkList.db";

    private static final String TABLA_CHECK_LIST = "CREATE TABLE IF NOT EXISTS checkList" +
            "(id INTEGER PRIMARY KEY AUTOINCREMENT, file TEXT, se TEXT, date TEXT, aux TEXT)";

    public MyDB(Context context) {
        super(context, NAME, null, VERSION_BASEDATOS);
    }

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

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS checkList");
        onCreate(db);
    }

    public boolean deleteDB(Context context) {
        return context.deleteDatabase(NAME);
    }

    public void insert(String file, String se, String date, String aux) {
        SQLiteDatabase db = getWritableDatabase();
        if (db != null) {
            ContentValues valores = new ContentValues();
            valores.put("file", file);
            valores.put("se", se);
            valores.put("date", date);
            valores.put("aux", aux);
            db.insert("checkList", null, valores);
            db.close();
        }
    }

    public List<String> loadHandler() {
        List<String> list = new ArrayList<String>();
        String query = "Select*FROM checkList";
        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery(query, null);
        while (cursor.moveToNext()) {
            int result_0 = cursor.getInt(0);
            String result_1 = cursor.getString(1);
            String result_2 = cursor.getString(2);
            String result_3 = cursor.getString(3);
            String result_4 = cursor.getString(4);

            list.add(result_1 + "%:&" + result_2 + "%:&" + result_3 + "%:&" + result_4);
        }
        cursor.close();
        db.close();
        return list;
    }

    public int getRowCount() {
        String query = "Select*FROM checkList";
        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery(query, null);
        return cursor.getCount();
    }

    public void deleteFirstRow() {
        SQLiteDatabase db = this.getWritableDatabase();
        String where = "id < (select id from checkList order by id limit 15, 1)";
        db.delete("checkList", where, null);
    }

    public void orderIt() {
        SQLiteDatabase db = this.getWritableDatabase();
        db.execSQL("VACUUM");
    }

    public String getLastHash() {
        SQLiteDatabase db = this.getWritableDatabase();
        String query = "Select*FROM checkList";
        Cursor cursor = db.rawQuery(query, null);
        cursor.moveToLast();
        return cursor.getString(1);
    }

    public void deleteRow(String file) {
        SQLiteDatabase db = this.getWritableDatabase();
        db.delete("checkList", "DELETE FROM checkList Where file = " + file, null);
    }
}

【问题讨论】:

    标签: java android sqlite android-sqlite sqliteopenhelper


    【解决方案1】:

    问题在于,在delete() 的第二个参数中,您使用了不需要的完整 sql 语句,并且您将变量 file 连接到 sql 语句的字符串,而不用单引号括起来。
    但即使你这样做了,这也不是安全且推荐的方式。
    在方法delete() 的3d 参数中传递参数file 并在sql 语句中使用? 占位符,它将被file 的值替换,正确引用,当语句将被解析时:

    db.delete("checkList", "file = ?", new String[] {file});
    

    delete() 的第二个参数是没有关键字 WHEREWHERE 子句。

    【讨论】:

    • 如何使用2列删除?我的意思是根据文件列值删除一行,然后自己删除另一行?
    • 有了这个:db.delete("checkList", "file = ? and anothercolumn = ?", new String[] {file, anothercolumnvalue});
    猜你喜欢
    • 1970-01-01
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    • 2011-04-08
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多