从数据库中删除一行

Posted

技术标签:

【中文标题】从数据库中删除一行【英文标题】:Delete one row from the database 【发布时间】:2011-06-17 00:42:47 【问题描述】:

我在删除一行时遇到了问题。我可以插入和删除整个表。为了只删除一行,我无法理解整个 ID 内容。我在看一些例子,但我无法理解。快把我逼疯了。

这里是 SQLite 类;

public class datahelper 
   private static final String DATABASE_NAME = "table.db";
   private static final int DATABASE_VERSION = 1;
   private static final String TABLE_NAME = "table1";

   private Context context;
   private SQLiteDatabase db;
   private SQLiteStatement insertStmt;

   private static final String INSERT =
       "insert into " + TABLE_NAME + "(name) values (?)";

   public datahelper(Context context) 
       this.context = context;
       OpenHelper openHelper = new OpenHelper(this.context);
       this.db = openHelper.getWritableDatabase();
       this.insertStmt = this.db.compileStatement(INSERT);
   

   public long insert(String name) 
       this.insertStmt.bindString(1, name);
       return this.insertStmt.executeInsert();
   

   public long insert2(String name) 
       this.insertStmt2.bindString(1, name);
       return this.insertStmt2.executeInsert();
   

   public void deleteAll() 
       this.db.delete(TABLE_NAME, null, null);
   

   private static class OpenHelper extends SQLiteOpenHelper 
       OpenHelper(Context context) 
           super(context, DATABASE_NAME, null, DATABASE_VERSION);
       

       @Override
       public void onCreate(SQLiteDatabase db) 
           db.execSQL("CREATE TABLE " + TABLE_NAME +
                      " (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT)");
   


【问题讨论】:

【参考方案1】:

执行查询

DELETE FROM TABLE_NAME WHERE id = SOMEVALUE

【讨论】:

【参考方案2】:

您似乎正在使用this API,它提供this delete method。我猜你会这样做:

public void delete(int id) 
    this.db.delete(TABLE_NAME, 'id = ?', new String[]  id.toString() );


(原答案...)

使用带有 WHERE 子句的 DELETE 语句,只删除具有您要删除的 id 的行:

DELETE FROM <tablename> WHERE id = ?

当然,您需要知道 id 才能执行此操作。 SQLite 提供了一个函数——sqlite3_last_insert_rowid()——你可以在 INSERT 之后立即调用它。如果您的 API 没有直接提供此功能,您可以通过等效的SQL function 间接获取:

SELECT last_insert_rowid()

如果您想删除某个名称(假设它是唯一的),也可以选择:

DELETE FROM <tablename> WHERE name = ?

【讨论】:

令我困惑的是我不能只输入该代码,我认为它必须看起来像这样 public void delete(String id) this.db.delete(TABLE_NUM,"id =?",空值); @Mark:啊,我突然想到你正在使用一个特定的 SQLite 包装器(也许是 android?),它提供了一种方便的删除方法。如果您: a) 指明您的操作系统/语言/SDK,将会有很大帮助; b) 在问题中包含您执行删除失败的尝试。

以上是关于从数据库中删除一行的主要内容,如果未能解决你的问题,请参考以下文章

根据复选框从数据库中删除一行

激活滑动删除时从一行中删除核心数据

从 JList 中删除一行

从列表视图中删除一行后刷新片段

如何从数据透视表中删除一行

我无法从 VB.net 的 MS 访问数据库中删除一行