Sqlite插入或更新

本文主要介绍Sqlite如何实现插入或更新。

在数据库中我们经常会有这种需求,插入时,某条记录不存在则插入,存在则更新。或更新时,某条记录存在则更新,不存在则插入。比如:
人员信息数据库,某个身份证若已经存在,重复插入则更新,否则新增记录。
网页缓存数据库,某个url已经存在,重复插入则更新,否则新增记录。

在mysql中可以使用replace into或是insert into …. on duplicate key update实现。在sqlite中我们同样使用replace into实现。分为两步,下面以http cache表为例,仅包含三个字段,主键_id, url, content

PS:根据 @MARRBOT 的反馈测试了下, replace into 在表中有数据会先删除整条,再插入要更新的数据,所以主键 id 会变,如果需要 id 不变的还是 insert 和 update 联合,可参考:SQLite – UPSERT *not* INSERT or REPLACESQLite UPSERT – ON DUPLICATE KEY UPDATE

第一步:

新建唯一索引: CREATE UNIQUE INDEX mycolumn_index ON mytable (myclumn);


1


CREATE UNIQUE INDEX unique_index_url ON http_cache (url);

java中可以直接在SQLiteOpenHelper的OnCreate中添加

Java


1

2

3

4

5

6

7

8

9

10

11


public class DbHelper extends SQLiteOpenHelper {

public void onCreate(SQLiteDatabase db) {

db.beginTransaction();

try {

db.execSQL(DbConstants.CREATE_HTTP_RESPONSE_TABLE_UNIQUE_INDEX.toString());

db.setTransactionSuccessful();

} finally {

db.endTransaction();

}

}

}

第二步:

调用replace into语句


1


REPLACE INTO http_cache (url, content) VALUES ('http://www.baidu.com/', '<html></html>' );

java中可以

Java


1


sQLiteDatabase.replace(DbConstants.HTTP_RESPONSE_TABLE_TABLE_NAME, null, contentValues)

时间: 2024-10-04 07:22:13

Sqlite插入或更新的相关文章

Android实现SQLite添加、更新及删除行的方法_Android

本文实例讲述了Android实现SQLite添加.更新及删除行的方法.分享给大家供大家参考,具体如下: SQLiteDatabase类暴露了特定的方法,如insert.delete和update等方法,这些方法包装了执行这些动作所需的SQL语句.尽管如此,execSQL方法允许你在数据库表上执行任何有效的SQL语句,而这些动作就是你想要手动执行的. 在任何时候,如果你修改了底层数据库的值,你都应该调用任一在当前表上浏览的Cursor的refreshQuery方法. 插入新行 为了创建一个新行,构

Android实现SQLite添加、更新及删除行的方法

本文实例讲述了Android实现SQLite添加.更新及删除行的方法.分享给大家供大家参考,具体如下: SQLiteDatabase类暴露了特定的方法,如insert.delete和update等方法,这些方法包装了执行这些动作所需的SQL语句.尽管如此,execSQL方法允许你在数据库表上执行任何有效的SQL语句,而这些动作就是你想要手动执行的. 在任何时候,如果你修改了底层数据库的值,你都应该调用任一在当前表上浏览的Cursor的refreshQuery方法. 插入新行 为了创建一个新行,构

关于jdbc中插入和更新的问题

问题描述 关于jdbc中插入和更新的问题 我用的oracle用jdbc进行相关操作,可是,只有插入语句能执行,不能执行更新和删除语句,这是怎么回事呢? 解决方案 不能执行更新和删除语句,检查下代码有问题吗?运行时有没有异常信息呢?如果你用的是纯JDBC操作的话,问题就可能出在代码上,把代码的异常分支打印堆栈日子,检查更新删除操作有没有提交事务.事出必有因,仔细找找呗. 解决方案二: 那就是你的sq语句,出现问题了,和JDBC没有关系,既然你保存能进去,那就证明数据库连接成功,在好好检查一下. 解

自动生成对表进行插入和更新的存储过程的存储过程

插入|存储过程 我找到了两个存储过程,能自动生成对一个数据表的插入和更新的存储过程,现在奉献给大家! 插入: Create procedure sp_GenInsert@TableName varchar(130),@ProcedureName varchar(130)asset nocount ondeclare @maxcol int,@TableID intset @TableID = object_id(@TableName)select @MaxCol = max(colorder)f

ASP.NET 2.0数据教程之十六: 概述插入、更新和删除数据

返回"ASP.NET 2.0数据教程目录" 导言 结束前面的几节,我们已经探讨过了如何使用GridView.DetailsView 和FormView控件来显示数据.这些控件简单地操作提供给它的数据.一般地,这 些控件通过使用一个数据源控件,例如ObjectDataSource来存取数据.我们已经 看过了ObjectDataSource是如何在ASP.NET页面和潜在的数据之间扮演一个代理的 角色.当一个GridView需要显示数据时,它调用ObjectDataSource的Selec

ASP.NET 2.0数据教程之四十九:使用SqlDataSource插入、更新以及删除数据

返回"ASP.NET 2.0数据教程目录" 导言 在概述插入.更新和删除数据中我们讨论过,GridView控件提供 了内建的更新与删除功能,而DetailsView和FormView控件除了这些之外还拥有插 入功能.这些数据修改功能可以直接接入到数据源控件中而不需要编写任何代码 .概述插入.更新和删除数据讲解了如何使用ObjectDataSource来帮助GridView .DetailsView以及FormView控件完成插入.更新以及删除操作. ObjectDataSource能工

ASP.NET 2.0数据教程之十七: 研究插入、更新和删除的关联事件

返回"ASP.NET 2.0数据教程目录" 导言 当使用GridView.DetailsView或FormView控件的内建插入.编辑 或删除特征时,在用户添加一条新记录或更新/删除一条现在记录的过程中发生了 多个步骤.正如我们之前一节里所讨论的,在GridView中编辑一行时,保存 (Update)和取消(Cancel)按钮将取代编辑(Edit)按钮,并且绑定列转换成 TextBox.在用户更新了数据并点击保存按钮之后,下述步骤在回传时执行: 1.该GridView控件根据当前编辑行

关于Java Hibernate 插入与更新同一张MySQL表不同字段,出现锁没被释放

问题描述 关于Java Hibernate 插入与更新同一张MySQL表不同字段,出现锁没被释放 关于Java Hibernate 插入与更新同一张MySQL表不同字段,出现锁没被释放,这个有可能是数据还没插入完或者插完了锁没有被释放,导致下一个更新操作不能执行,等待超时,这个情况出现在操作数据量大的时候!这个情况有哪几种解决方式? [http-bio-8080-exec-3] [SQLErrorCodesFactory.:126] SQLErrorCodes loaded: [DB2 Derb

在ASP.NET 2.0中操作数据之十七:研究插入、更新和删除的关联事件_自学过程

导言 当使用GridView.DetailsView或FormView控件的内建插入.编辑或删除特征时,在用户添加一条新记录或更新/删除一条现在记录的过程中发生了多个步骤.正如我们之前一节里所讨论的,在GridView中编辑一行时,保存(Update)和取消(Cancel)按钮将取代编辑(Edit)按钮,并且绑定列转换成TextBox.在用户更新了数据并点击保存按钮之后,下述步骤在回传时执行: 1.该GridView控件根据当前编辑行的唯一标识字段(通过DataKeyNames属性)组装它的Ob