一、查询操作:

查询操作比较复杂,主要有如下操作:

 db.rawQuery(String sql, String[] selectionArgs);
db.query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy);
db.query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit);
db.query(String distinct, String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit);

1、最为简单,将所有的SQL语句组织到一个字符串中,selectionArgs就是占位符实际参数集

2、columns表示要查询的列所有名称集,selection表示WHERE之后的条件语句,可以使用占位符,groupBy指定分组的列名,having指定分组条件,配合groupBy使用,orderBy指定排序的列名

3、limit指定分页参数

4、distinct可以指定“true”或“false”表示要不要过滤重复值。

selection、groupBy、having、orderBy、limit这几个参数中不包括“WHERE”、“GROUP BY”、“HAVING”、“ORDER BY”、“LIMIT”等SQL关键字。
返回一个Cursor对象,代表数据集的游标,有点类似于JavaSE中的ResultSet。

Cursor对象的常用方法:

 cursor.move(int offset); //以当前位置为参考,移动到指定行
cursor.moveToFirst(); //移动到第一行
cursor.moveToLast(); //移动到最后一行
cursor.moveToPosition(int position); //移动到指定行
cursor.moveToPrevious(); //移动到前一行
cursor.moveToNext(); //移动到下一行
cursor.isFirst(); //是否指向第一条
cursor.isLast(); //是否指向最后一条
cursor.isBeforeFirst(); //是否指向第一条之前
cursor.isAfterLast(); //是否指向最后一条之后
cursor.isNull(int columnIndex); //指定列是否为空(列基数为0)
cursor.isClosed(); //游标是否已关闭
cursor.getCount(); //总数据项数
cursor.getPosition(); //返回当前游标所指向的行数
cursor.getColumnIndex(String columnName);//返回某列名对应的列索引值
cursor.getString(int columnIndex); //返回当前行指定列的值

二、添加、更新和删除

    db.executeSQL(String sql);
db.executeSQL(String sql, Object[] bindArgs);//sql语句中使用占位符,然后第二个参数是实际的参数集 db.insert(String table, String nullColumnHack, ContentValues values);
db.update(String table, Contentvalues values, String whereClause, String whereArgs);
db.delete(String table, String whereClause, String whereArgs);

Insert:

table第一个参数表示操作表名;insert中的第二个参数表示如果插入的数据每一列都为空的话,需要指定此行中某一列的名称,系统将此列设置为NULL,不至于出现错误;insert中的第三个参数是ContentValues类型的变量,是一组键值对组成,Columnkey代表列名,ColumnValue代表该列要插入的值;
Update:

update的第二个参数也很类似,只不过它是更新该字段key为最新的value值,第三个参数whereClause表示WHERE表达式,比如“age > ? and age < ?”等,whereArgs参数是占位符的实际参数值;

delete:

其参数基本一样。

三、具体实例:

         //打开或创建test.db数据库
SQLiteDatabase db = openOrCreateDatabase("test.db", Context.MODE_PRIVATE, null);
db.execSQL("DROP TABLE IF EXISTS person");
//创建person表
db.execSQL("CREATE TABLE person (_id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR, age SMALLINT)");
Person person = new Person();
person.name = "john";
person.age = 30;
//插入数据
db.execSQL("INSERT INTO person VALUES (NULL, ?, ?)", new Object[]{person.name, person.age}); person.name = "david";
person.age = 33;
//ContentValues以键值对的形式存放数据
ContentValues cv = new ContentValues();
cv.put("name", person.name);
cv.put("age", person.age);
//插入ContentValues中的数据
db.insert("person", null, cv); cv = new ContentValues();
cv.put("age", 35);
//更新数据
db.update("person", cv, "name = ?", new String[]{"john"}); Cursor c = db.rawQuery("SELECT * FROM person WHERE age >= ?", new String[]{"33"});
while (c.moveToNext()) {
int _id = c.getInt(c.getColumnIndex("_id"));
String name = c.getString(c.getColumnIndex("name"));
int age = c.getInt(c.getColumnIndex("age"));
Log.i("db", "_id=>" + _id + ", name=>" + name + ", age=>" + age);
}
c.close(); //删除数据
db.delete("person", "age < ?", new String[]{"35"}); //关闭当前数据库
db.close(); //删除test.db数据库
// deleteDatabase("test.db");
}

四、SQLiteOpenHelper

SQLiteOpenHelper是SQLiteDatabse的一个帮助类,用来管理数据的创建和版本更新。一般的用法是定义一个类继承SQLiteOpenHelper,并实现两个回调方法,OnCreate(SQLiteDatabase db)和onUpgrade(SQLiteDatabse, int oldVersion, int newVersion)来创建和更新数据库。

一般可以如下获取帮助类的实例:  mOpenHelper = new DatabaseHelper(getContext());

他有如下三个类定义:

public SQLiteOpenHelper(Context context, String name, CursorFactory factory,int version)

public SQLiteOpenHelper(Context context, String name, int version)

public SQLiteOpenHelper(Context context)

二个回调函数:

public void onCreate(SQLiteDatabase db)

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)

//获取SQLiteDatabase实例

SQLiteDatabase db = getWritableDatabase();

SQLiteDatabase db = getReadableDatabase();

五、事务处理

SQLiteDatabase的beginTransaction()方法可以开启一个事务,程序执行到endTransaction() 方法时会检查事务的标志是否为成功,如果程序执行到endTransaction()之前调用了setTransactionSuccessful() 方法设置事务的标志为成功则提交事务,如果没有调用setTransactionSuccessful() 方法则回滚事务。

事务处理应用:很多时候我们需要批量的向Sqlite中插入大量数据时,单独的使用添加方法导致应用响应缓慢, 因为sqlite插入数据的时候默认一条语句就是一个事务,有多少条数据就有多少次磁盘操作。为了保证数据的一致性,避免出现数据缺失等情况。

 SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
//开启事务
db.beginTransaction();
try{
//批量处理操作
//do something
db.execSQL("SQL语句", new Object[]{});
db.execSQL("SQL语句", new Object[]{});
//设置事务标志为成功,当结束事务时就会提交事务
db.setTransactionSuccessful();
}
catch(Exception e){
}
finally{
//结束事务
db.endTransaction();
}

注:以上代码参考:

http://blog.csdn.net/li12412414/article/details/51958774

http://blog.csdn.net/xiaanming/article/details/8679521

轻量数据库SQLiteDataBase的相关操作方法的更多相关文章

  1. node环境使用lowdb轻量数据库以及基本用法

    1.安装: npm install lowdb --save 2..引入lowdb,设置表 const low = require('lowdb');  const FileSync = requir ...

  2. 编写轻量ajax组件01-对比webform平台上的各种实现方式

    前言 Asp.net WebForm 和 Asp.net MVC(简称MVC) 都是基于Asp.net的web开发框架,两者有很大的区别,其中一个就是MVC更加注重http本质,而WebForm试图屏 ...

  3. CYQ.Data 轻量数据层之路 优雅V1.4 现世 附API帮助文档(九)

    继上一版本V1.3版本发布到现在,时隔N天了:[V1.3版本开源见:CYQ.Data 轻量数据层之路 华丽V1.3版本 框架开源] N天的时间,根据各路网友的反映及自身的想法,继续修改优化着本框架,力 ...

  4. SqlSugar轻量ORM

      蓝灯软件数据股份有限公司项目,代码开源. SqlSugar是一款轻量级的MSSQL ORM ,除了具有媲美ADO的性能外还具有和EF相似简单易用的语法. 学习列表 0.功能更新 1.SqlSuga ...

  5. 阿里云 轻量应用服务器(LAMP) 使用日志记录

    phpStudy(PHP运行环境一键安装包) https://www.jb51.net/softs/182860.html 0:PHP开发工具 https://netbeans.org/downloa ...

  6. ASP.NET Core 3.0 一个 jwt 的轻量角色/用户、单个API控制的授权认证库

    目录 说明 一.定义角色.API.用户 二.添加自定义事件 三.注入授权服务和中间件 三.如何设置API的授权 四.添加登录颁发 Token 五.部分说明 六.验证 说明 ASP.NET Core 3 ...

  7. 阿里云轻量应用服务器 配置mysql详解(转载)

    1.服务器规格 1.地域选择 考虑个人地址因素因此选择了华南. 2.选择应用镜像/系统镜像 这个应该看个人需求,因为我只是想用来放数据库的,所以就随便选了个WordPress. 选好之后购买就完事了, ...

  8. Web Scraper——轻量数据爬取利器

    日常学习工作中,我们多多少少都会遇到一些数据爬取的需求,比如说写论文时要收集相关课题下的论文列表,运营活动时收集用户评价,竞品分析时收集友商数据. 当我们着手准备收集数据时,面对低效的复制黏贴工作,一 ...

  9. Raspkate - 基于.NET的可运行于树莓派的轻量型Web服务器

    最近在业余时间玩玩树莓派,刚开始的时候在树莓派里写一些基于wiringPi库的C语言程序来控制树莓派的GPIO引脚,从而控制LED发光二极管的闪烁,后来觉得,是不是可以使用HTML5+jQuery等流 ...

随机推荐

  1. 不抛异常的swap函数

    namespace AStuff{ template<typename T> class A { public: void swap(A *other) { using std::swap ...

  2. 第十六节:pandas之日期时间

    Pandas日期功能扩展了时间序列,在财务数据分析中起主要作用.

  3. Thesis Viva checklist

    This list gives you suggestions helpful in preparing to defend your thesis: I know my thesis thoroug ...

  4. PAT 1119 Pre- and Post-order Traversals

    Suppose that all the keys in a binary tree are distinct positive integers. A unique binary tree can ...

  5. 解决WP程序 重复打开出现 “正在加载...” 字样 解决方案

    在开发winphone程序时候 我们经常遇到调试.在调试的时候 可能会重复打开 debug一下.可是有时候 经常遇到 "正在加载...."字样.而且很慢.效率很低. 测试发现 在 ...

  6. nagios新增监控集群、卸载监控集群批量操作

    1.一定要找应用侧确认每台节点上需要监控的进程,不要盲目以为所有hadoop集群的zk.journal啥的都一样,切记! 2.被监控节点只需要安装nagios-plugin和nrpe,依赖需要安装xi ...

  7. [bzoj4010][HNOI2015]菜肴制作_贪心_拓扑排序

    菜肴制作 bzoj-4010 HNOI-2015 题目大意:给定一张n个点m条边的有向图,求一个toposort,使得:(1)满足编号为1的点尽量在前:(2)满足(1)的情况下编号为2的点尽量在前,以 ...

  8. 洛谷——P2925 [USACO08DEC]干草出售Hay For Sale

    https://www.luogu.org/problem/show?pid=2925 题目描述 Farmer John suffered a terrible loss when giant Aus ...

  9. ZooKeeper环境搭建(单机/集群)(转)

    前提: 配置文件主要是在$ZOOKEEPER_HOME/conf/zoo.cfg,刚解压时为zoo_sample.cfg,重命名zoo.cfg即可. 配置文件常用项参考:http://www.cnbl ...

  10. DATASNAP中间件调用带OUTPUT参数的存储过程

    服务端: function TServerMethods1.spExecOut(funcId, sqlId, inParams: OleVariant): OleVariant;var d: Tfrm ...