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 ...
随机推荐
- C++_运算符重载
什么是运算符的重载? 运算符与类结合,产生新的含义. 为什么要引入运算符重载? 作用:为了实现类的多态性(多态是指一个函数名有多种含义) 怎么实现运算符的重载? 方式:类的成员函数 或 友元函数(类外 ...
- logistic回归和probit回归预测公司被ST的概率(应用)
1.适合阅读人群: 知道以下知识点:盒状图.假设检验.逻辑回归的理论.probit的理论.看过回归分析,了解AIC和BIC判别准则.能自己跑R语言程序 2.本文目的:用R语言演示一个相对完整的逻辑回归 ...
- 卷积神经网络(CNN)模型结构
在前面我们讲述了DNN的模型与前向反向传播算法.而在DNN大类中,卷积神经网络(Convolutional Neural Networks,以下简称CNN)是最为成功的DNN特例之一.CNN广泛的应用 ...
- HDU---Labyrinth
Labyrinth Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- .Net3月份开发札记
筛选数据 需求:如果数据库中存在OrderNum相同,且IsDefault不同的记录,那么IsDefault值为0的记录将替换值为1的记录(IsDefault值为1的记录不展示). 由于查出来的数据不 ...
- Day01 Java环境变量配置
1. Java环境配置的确浪费了一些时间,网上找的资料在设置PATH.CLASSPATH几乎都是利用的JAVA_HOME的路径 例如CLASSPATH=.;%JAVA_HOME%\lib;%JAVA_ ...
- 锋利的jQuery事件
一:事件 1.鼠标事件 (1)$()是$(document)的简写,默认参数是document. $(function(){}是$(document).ready(function(){})的简写. ...
- redux-form的学习笔记
redux是一种常用的与react框架搭配的一种数据流架构,而伴随着redux的出现,也出现了许多基于redux开源的第三方库,而redux-form就是其中之一的开源组件库,到今天我写下这篇笔记为止 ...
- KoaHub平台基于Node.js开发的Koa的模板系统handlebars插件代码详情
koahub-handlebars koahub-handlebars koahub handlebars templates Installation $ npm install koahub-ha ...
- 1113: [Poi2008]海报PLA
1113: [Poi2008]海报PLA Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 765 Solved: 466[Submit][Status ...