【问题标题】:Android SQLite how to delete with limit [duplicate]Android SQLite如何限制删除[重复]
【发布时间】:2017-12-10 03:41:28
【问题描述】:

我只想从我的数据库表 User 中删除一行。

我试过this,但我不知道如何使用SQLITE_ENABLE_UPDATE_DELETE_LIMIT

这是我的代码:

    SQLiteDatabase sqLiteDatabase = this.openOrCreateDatabase("User", MODE_PRIVATE, null);

        //sqLiteDatabase.execSQL("INSERT INTO user (name, age) VALUES ('jihyo', 10)");

        sqLiteDatabase.execSQL("DELETE FROM user WHERE name ='jihyo' LIMIT 1");
        Cursor c = sqLiteDatabase.rawQuery("SELECT * FROM user WHERE name = 'jihyo'", null);
        int nameIndex = c.getColumnIndex("name");
        int ageIndex = c.getColumnIndex("age");

        c.moveToFirst();
        do {
            Log.v("name", c.getString(nameIndex));
            Log.v("age", c.getString(ageIndex));
        } while (c.moveToNext());

这是错误:

android.database.sqlite.SQLiteException:接近“LIMIT”:语法错误 (代码1):,编译时:从用户那里删除名称='jihyo' 限制 1 个

【问题讨论】:

  • 使用要删除的数据的唯一ID将其从您的表中删除
  • 删除一个人应该始终使用id,这样更安全更好
  • 谢谢,但我想限制删除。大声笑

标签: android sqlite android-sqlite limit delete-row


【解决方案1】:

您不能在删除查询中应用限制,因为 DELETE Clause 没有 LIMIT 因此您可以使用 SELECT 查询选择单个记录并在基础上应用 DELETE 选定的查询 例如。

DELETE FROM user WHERE id IN
 (SELECT id FROM user
 WHERE name = 'jihyo'
 LIMIT 1);

注意:您可以使用 '=' 代替 'IN'

【讨论】:

  • 感谢您回答我的问题。我添加了两个数据,例如 name = 'jihyo' age = 10、name = 'lihyo'、age = 10 和 sqLiteDatabase.execSQL("DELETE FROM user WHERE name IN (SELECT name FROM user WHERE name ='jihyo' LIMIT 1)" );但结果是=它删除了所有数据似乎限制不起作用....
  • 你知道为什么吗???
  • 您已经根据名称应用了条件,因此它选择查询获取一条包含 name='jihyo' 的记录,因此删除查询变为“从 name in('jihyo') 的用户中删除,因此它将删除所有名称为“jihyo”的用户,您需要使用其他唯一的列名,例如 id 或其他列。
  • 我明白了,谢谢你回答我的问题,祝你有美好的一天!
【解决方案2】:

试试这个:

db.execSQL("Delete from user where user_id IN (Select user_id from user where name = 'jihyo' limit 1)");

[更新]:= 不适用于 LIMIT 操作,因此您需要像这样:

Cursor c = db.execSQL("Select user_id from user where name = 'jihyo' limit 1");
        if (c.moveToFirst()){
            String id = c.getString(0);
            db.execSQL("Delete from user where user_id = "+id);
        }

【讨论】:

  • 感谢您回答我的问题。我添加了两个数据,例如 name = 'jihyo' age = 10、name = 'lihyo'、age = 10 和 sqLiteDatabase.execSQL("DELETE FROM user WHERE name IN (SELECT name FROM user WHERE name ='jihyo' LIMIT 1)" );但结果=它删除了所有'似乎限制不起作用....
  • 你知道为什么吗?
  • 我更新了我的回复
  • 谢谢,但您使用了唯一 ID 吗?
  • 是的,它是id
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-03
  • 2014-11-11
  • 1970-01-01
  • 2021-05-16
  • 1970-01-01
相关资源
最近更新 更多