SQLite 数据库
内容来源:高成珍、钟元生《Android编程经典案例解析》
SQLite 数据库是Android 中内嵌的轻量级关系型数据库,本质上只是一个文件。SQLite 内部只支持NULL,INTEGER, REAL,TEXT 和BLOB 这五种数据类型,在SQLite 中可以把各种类型的数据保存到任何字段中而不用关心字段声明的数据类型是什么,例如可以把字符串类型的值存入INTEGER类型的字段中。因此在编写建表语句时可以省略数据列后面的类型声明。但有一种情况例外,定义为INTEGER PRIMARY KEY 的字段只能存储64位整数,当向这种字段保存整数以外的数据时会产生错误。
常见的SQL标准语句如下:
1. 查询:
select * from 表名 where 条件子句 group by 分组子句 having ...order by 排序子句
例如:
select name from person group by name having count(*) > 1
查询person 表中name 字段值出现超过1次的name 字段的值
2. 分页:
select * from 表名 limit 跳过的记录数, 显示的记录数
例如:
select * from person limit 3, 5
从person 表中获取5条记录,跳过前面三条记录
3. 插入:
insert into 表名(字段列表) values(值列表)
例如:
insert into person(name, age) values(‘张三’, 20)
向person表中插入一条记录,名字为小明,年龄为20岁
4. 更新:
update 表名 set 字段名=值 where 条件子句
例如:
update person set name=‘李四’ where id=10
将ID为10的记录的姓名改为李四
5.删除:
delete from 表名 where 条件子句
例如:
delete from person where id=10
删除person中ID为10的记录
与SQLite相关的几个类:
1. SQLiteOpenHelper 是Android提供的管理数据库的工具类,主要用于数据库的创建/打开和版本更新等。该类是一个抽象类,在使用时需要创建SQLite类的子类,并重写它的 onCreate() 和onUpdate() 方法(这两个方法是抽象的,必须扩展)。
在SQLiteOpenHelper类中包含的方法主要如下:
(1)public abstract void onCreate(SQLiteDatabase db);
当数据库第一次被创建时调用该方法,通常在该方法中执行初始化操作,如创建表结构,插入初始数据等。
(2)public abstract void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion);
数据库版本发生变化时调用该方法。
(3)public void onOpen(SQLiteDatabase db) {}
当数据库打开时调用该方法。
(4)public SQLiteDatabase getReadableDatabase();
以读写的方式打开数据库对应的SQLiteDatabase 对象,该方法内部调用 getWritableDatabase() 方法, 返回的对象与getWritableDatabase()对象返回的方法一致,当数据库磁盘空间满了时,通过getWritableDatabase() 方法打开数据库就会出错,但通过getReadableDatabase() 方法会尝试以只读的方式打开数据库。
(5)public SQLiteDatabase getWritableDatabase();
以写的方式打开数据库对应的SQLiteDatabase 对象,一旦打开成功,将会缓存该数据库对象。
当调用SQLiteOpenHelper 的getWritableDatabase() 或getReadableDatabase() 方法获取SQLite 实例时,系统会根据数据库名称来判断该数据库是否存在,如果数据库不存在,Android系统会自动生成一个数据库,然后回调onCreate方法,在onCreate()方法中执行建表语句及添加一些初始化数据。如果数据库存在,系统再根据数据库的版本号来判断是否需要更新,如果版本号与之前的不一致,则需要更新,系统自动调用onUpgrade() 方法,在该方法中根据需要执行数据表的结构及数据更新。
2. SQLiteDatabase 是Android提供的SQLite 数据库的封装类,该类封装了一些操作数据库的API,通过该类可以完成数据的添加(Create)/查询(Retrieve)/更新(Update)和删除(Delete) 操作,分别提供了insert(), query(), update(), delete() 方法。此外还有两个实用的方法:execSQL() 和rawQuery() 方法。execSQL() 方法可以执行insert/delete/update 和 create table 之类有更改行为的SQL语句,而rawQuery() 用于执行select 语句。原型分别如下:
//----------执行带占位符(占位符用?表示)的SQL语句,如果SQL语句中没有占位符,则第二个参数可传null。
execSQL(String sql, Object[] bindArgs);
//----------执行SQL语句
execSQL(String sql);
//----------执行带占位符的SQL查询。
rawQuery(String sql, String[] selectionArgs);
3. Cursor 接口主要用于存放查询记录的接口,Cursor 是结果集游标,用于对结果集进行随机访问。Cursor 提供了以下方法来移动查询结果的记录指针:
(1)move(int offset);//----------------将记录指针向上(offset为负)或向下(offset为正)移动指定行数;
(2)moveToNext();//------------------将游标从当前记录移动到下一条记录,如果已经移过了结果集的最后一条记录,返回false,否则返回true;
(3)moveToPrevious();//--------------将游标从当前记录移动到上一记录,如果已经移过了结果集的第一条记录,返回false,否则返回true;
(4)moveToFirst();//------------------将游标移动到结果集的第一条记录,如果结果集为空,返回false,否则返回true;
(5)moveToLast();//------------------将游标移动到结果集的最后一条记录,如果结果集为空,返回false,否则返回true;
使用SQLiteDatabase 进行数据库操作的步骤:
(1)创建数据库的辅助类对象,指定数据库的名称和版本号(继承抽象类SQLiteOpenHelper 并实现onCreate() 和 onUpgrade() );
(2)调用辅助类的getReadableDatabase() 或getWritabelDatabase()方法,获取SQLiteDatabase 对象,该对象代表了与数据库的连接;
(3)调用SQLiteDatabase对象的相关方法来执行增/删/查/改操作;
(4)对数据库操作的结果进行处理,例如判断是否插入/删除或者更新成功,将查询结果记录转换成列表显示等;
(5)关闭数据库连接,回收资源。
SQLite 数据库的更多相关文章
- Android之SQLite数据库篇
一.SQLite简介 Google为Andriod的较大的数据处理提供了SQLite,他在数据存储.管理.维护等各方面都相当出色,功能也非常的强大. 二.SQLite的特点 1.轻量级使用 SQLit ...
- Qt5 开发 iOS 应用之访问 SQLite 数据库
开发环境: macOS 10.12.1 Xcode 8.1 Qt 5.8 iPhone 6S+iOS 10.1.1 源代码: 我在 Qt 程序里指定了数据库的名称来创建数据库,在 Win10.An ...
- 【Win 10 应用开发】Sqlite 数据库的简单用法
如果老周没记错的话,园子里曾经有朋友写过如何在 UWP 项目中使用 Sqlite数据库的文章.目前我们都是使用第三方封装的库,将来,SDK会加入对 Sqlite 的支持. 尽管目前 UWP-RT 库中 ...
- Android之SQLite数据库使用
转载整理于:http://my.csdn.net/lmj623565791 我刚开始接触Android的时候甚至都不敢相信,Android系统竟然是内置了数据库的!好吧,是我太孤陋寡闻了.由于我之前是 ...
- 让PDF.NET支持最新的SQLite数据库
最近项目中用到了SQLite,之前项目中用的是PDF.NET+MySQL的组合,已经写了不少代码,如果能把写好的代码直接用在SQLite上就好了,PDF.NET支持大部分主流的数据库,这个当然可以,只 ...
- iOS sqlite数据库图像化查看
问题描述:在xocde上用sqlite数据库的时候,因为没有图形化界面,有些时候很难看出自己设计的数据库是否有问题,比如我刚上手sqlite数据库设计id为自增长时,很自然的用了identify(1, ...
- Android中SQLite数据库小计
2016-03-16 Android数据库支持 本文节选并翻译<Enterprise Android - Programing Android Database Applications for ...
- Android开发-之SQLite数据库
之前我们讲了如何将数据存储在文件中,那么除了这种方式呢,就是我们常见的大家都知道的将数据存储在数据库当中了. 将数据存储在数据库中的优势: 1)存储在数据库中的数据更加方便操作,比如增.删.改.查等 ...
- Java操作Sqlite数据库-jdbc连接
Java操作Sqlite数据库步骤: 1. 导入Sqlite jdbc 本文使用sqlite-jdbc-3.7.2.jar,下载地址 http://pan.baidu.com/s/1kVHAGdD 2 ...
- Android开发学习——SQLite数据库与单元测试
SQLite数据库 轻量级关系型数据库 创建数据库需要使用的api:SQLiteOpenHelper public class Myopenhelper extends SQLiteOpenHelp ...
随机推荐
- Algorithms(4th)谢路云译大纲总结(附实现源码)
前言: 此算法书可以说是Java程序开发者的福音.里面涉及近50种计算机领域的经典算法,几位作者花了近40年的时间才完成这本著作.秉着对作者的敬仰与对算法的兴趣,我多次翻阅此书,而且常常被书中的经典算 ...
- 获取LayoutInflater对象的方法和inflate方法的一些参数问题
一.获取LayoutInflater的三种方法 1. LayoutInflater layoutInflater = (LayoutInflater) MainActivity.this.getSys ...
- VS2012 百度云下载 开发工具
百度云下载地址:链接: http://pan.baidu.com/s/1qWDIDPi密码: 5nr0 ASP.NET MVC4.0+ WebAPI+EasyUI+KnockOutJS快速开发框架 通 ...
- 第十九篇 js高级知识---词法分析和AO 链
上面一篇文章说了js的作用域链,这一节算是对上面的延申,有一个典型的例子,首先看原来的一段代码: var name = "test"; function t() { var b = ...
- mfc---添加背景图
添加背景图: CDC m_dcMem CBitmap m_bmpMem CDC * pDC = GetDC(); m_dc.CreateComparableDC(pDC); m_bmpMem.Load ...
- 每一个程序员都应该知道的高并发处理技巧、创业公司如何解决高并发问题、互联网高并发问题解决思路、caoz大神多年经验总结分享
本文来源于caoz梦呓公众号高并发专辑,以图形化.松耦合的方式,对互联网高并发问题做了详细解读与分析,"技术在短期内被高估,而在长期中又被低估",而不同的场景和人员成本又导致了巨头 ...
- Html5 基础----列表详述
html5列表 标签 列表分为: 有序列表/无序列表/自定义列表,用的最多的为无序列表和自定义列表 1.有序列表(order list) eg:把
- 1634: [Usaco2007 Jan]Protecting the Flowers 护花
1634: [Usaco2007 Jan]Protecting the Flowers 护花 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 493 So ...
- Java设计模式之《调停者模式》及应用场景
原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6518603.html 调停者模式. 我们想象一下这样的场景:一个系统内部通过许多的类互相之 ...
- C# 使用Process调用外部程序中所遇到的参数问题
在使用Process.Start 调用外部程序时,除了程序的地址之外,是可以传递参数的,Process.Start 也有多个重载: // // 摘要: // 启动由包含进程启动信息(例如,要启动的进程 ...