数据存储与访问之——初见SQLite数据库
本节引言:本节学习Android数据库存储与访问的第三种方式:SQLite数据库,和其他的SQL数据库不同,我们并不需要在手机上另外安装一个数据库手机软件,Android系统已经集成了这个数据库,我们无需像使用其他数据库软件(Oracle,MSSQL,MySql等)又要安装,然后完成相关配置,又要改端口之类的! |
1.基本的概念1)SQLite是什么?为什么要用SQLite?SQLite有什么特点?答:下面本姑娘来为大家讲解 SQLite是一个轻量级的关系型数据库,运算速度快,占用资源少,很适合在移动设备上使用,不仅支持标准的SQL语法,还遵循ACID(数据库事务)原则,无需账号,使用起来非常方便! ②使用文件与SharedPreference来保存数据,但是在很多情况下,文件不一定是有效的,如多线程并发访问是相关的;app要处理可能变化的复杂数据结构等等!比如银行的存钱和取钱,使用前两者就会显得很无力或者很繁琐,数据库的出现可以解决这种问题,而Android又给我们提供了一个这样轻量级的SQLite,为何不用呢? ③SQLite支持五种数据类型NULL,INTEGER,REAL(浮点数),TEXT(字符串文本)和BLOB(二进制对象),虽然只有五种,但是对于varchar,char等其他数据类型都是可以保存起来的,因为SQLite有个最大的特点:你可以各种数据类型的数据保存到任何字段中而不用关心字段声明的类型是什么,比如你可以在Integer类型的字段中存放字符串,当然除了声明主键INTEGER PRIMARY KEY的字段只能够存储64位整数!另外SQLite在解析CREATE TABLE语句时,会忽略CREATE TABLE语句中跟在字段名后面数据类型信息如下面语句会忽略 name字段的类型信息: CREATE TABLE person (personid integer primary key autoincrement, name varchar(20)) 小结下特点: SQLite通过文件来保存数据库,一个文件就是一个数据库,数据库中又包含多个表格,表格里又有多条记录,每个记录由多个字段构成,每个字段有对应的值,每个值我们可以指定类型,也可以不指定类型(除主键之外) |
2)几个相关的类:我们在使用数据库时使用的三个相关的类:
|
2.使用SQLiteOpenHelper类创建数据库与版本管理对于涉及数据库的app,我们不可能手动的去给他们创建数据库的文件,所以在第一次启动app的时候创建好数据库表;而当我们的应用进行升级需要修改数据库表的结构时,这个时候就需要对数据库表进行更新了,对于这两个操作,安卓给我们提供了SQLiteOpenHelper的两个方法,onCreate( )与onUpgrade( )来实现 方法的解析:
|
代码示例:
package com.nyl.activity; import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper; /**
* 创建数据库的帮助类
*/
public class MyDBOpenHelper extends SQLiteOpenHelper{ /**
* @param context 上下文
* @param name 数据库名
* @param factory 允许我们在查数据的时候返回一个自定义的Cursor,一般都是传入null
* @param version 表示当前数据库的版本号,可用于对数据库进行升级操作
*/
public MyDBOpenHelper(Context context,String name,SQLiteDatabase.CursorFactory factory,int version){
super(context,"my,db",null,);
} //数据库第一次创建时被调用
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE person(personid INTEGER PRIMARY KEY AUTOINCREMENT,name VARCHAR(20))");
} //软件版本号发生改变时调用
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("ALTER TABLE person ADD phone VARCHAR(12) NULL");
}
}
代码解析:上述代码第一次启动应用,我们会创建这个my.db的文件,并且会执行onCreate()里的方法,创建了一个Person的表,它有两个字段,主键personId和name字段,接着如我们修改db的版本号,那么下次启动就会调用onUpgrade()里的方法,往表中在插入一个字段,另外这里是插入一个字段,所以数据不会丢失,如果是重建表的话,表中数据会全部丢失。 流程小结:1.自定义一个类继承SQLiteOpenHelper类 2.在该类的构造方法的super中设置好要创建的数据库名,版本号 3.重写onCreate( )方法创建表结构 4.重写onUpgrade( )方法定义版本号发生改变后执行的操作 |
|
3.如何查看我们生成的db文件
在这里就不讲解,建议去看郭霖的《第一行代码——Android》按着流程图试试!
4.使用Android提供的API操作SQLite哈哈~废话不多说,代码是最好的老师,我们直接进入实操吧..... 代码示例:运行效果图:
实现代码布局很简单,就四个Button. <?xml version="1.0" encoding="utf-8"?> MainActivity.java的代码: package com.nyl.activity; import android.content.ContentValues; |
5.使用SQL语句操作数据库当然,你可能已经学过SQL,会写相关的SQL语句,而且不想用Android提供的这些API, 你可以直接使用SQLiteDatabase给我们提供的相关方法:
使用代码示例:1.插入数据:public void save(Person p) 2.删除数据: public void delete(Integer id) 3.修改数据: public void update(Person p) 4.查询数据: public Person find(Integer id) 5.数据分页: public List<Person> getScrollData(int offset,int maxResult) 6.查询记录数: public long getCount() PS:除了上面获取条数的方法外还可以使用cursor.getCount()方法获得数据的条数, 但是SQL语句要改改!比如SELECT * FROM person; |
本节小结:
本节主要是跟大家一起学习了Android内置SQLite的基本用法,下节再研究SQLite事务,应用更新数据库里数据怎么处理,以及数据库存储大二进制文件 的方法!好的,本节就到这里~晚安!
数据存储与访问之——初见SQLite数据库的更多相关文章
- 安卓数据存储(3):SQLite数据库存储
SQLite简介 Google为Andriod的较大的数据处理提供了SQLite,他在数据存储.管理.维护等各方面都相当出色,功能也非常的强大.SQLite具备下列特点: 1.轻量级:使用 SQLit ...
- C#访问加密的SQLite数据库
前提:一个项目需要存储各种密码数据,使用的嵌入式的SQLite数据库.默认的SQLite数据库是没有加密的,这样相当不安全.找呀找呀找方法... 方法: 1.使用SQLite管理器加密. 部分SQLi ...
- Android之数据存储----使用LoaderManager异步加载数据库
一.各种概念: 1.Loaders: 适用于Android3.0以及更高的版本,它提供了一套在UI的主线程中异步加载数据的框架.使用Loaders可以非常简单的在Activity或者Fragment中 ...
- JDBC访问及操作SQLite数据库
SQLite 是一个开源的嵌入式关系数据库,其特点是高度便携.使用方便.结构紧凑.高效.可靠. 与其他数据库管理系统不同,SQLite 的安装和运行非常简单,在大多数情况下,只要确保SQLite的二进 ...
- 【Android实验】 数据存储与访问sqlite
目录 实验目的 实验要求 实验过程 功能分析: 实验结果: 实验的代码 实验总结 实验目的 分别使用sqlite3工具和Android代码的方式建立SQLite数据库.在完成建立数据库的工作后 ...
- 基于三层架构下的公共数据访问方法(Sqlite数据库)
作者总结了一下,使用Winform的三层架构做窗体应用程序,在数据访问方面,有用到纯sql语句方法.参数方法.存储过程方法. 那么什么是三层架构呢? UI---存放Form窗体---(用户所关心的) ...
- Laravel 5.1 中 Session 数据存储、访问、删除及一次性Session实例教程
1.Session的由来及其实现 HTTP协议是无状态的协议,同一个客户端的这次请求和上次请求是没有对应关系的.也就是说我们无法在服务器端确认两次请求是否是同一个用户所为,这为我们在一些应用场景中实现 ...
- 数据存储与访问之——SharedPreferences
使用SharedPreferences(保存用户偏好参数)保存数据, 当我们的应用想要保存用户的一些偏好参数,比如是否自动登陆,是否记住账号密码,是否在Wifi下才能 联网等相关信息,如果使用数据库的 ...
- [Swift通天遁地]七、数据与安全-(5)高效操作SQLite数据库
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
随机推荐
- perl访问数组中变量
数组一个是存储标量值的无序列表变量. 数组变量以 @ 开头.访问数组元素使用 $ + 变量名称 + [索引值] 格式来读取,实例如下: #!/usr/bin/perl @names = (" ...
- linux 自动备份脚本
首先我在/root/backup 目录下建立一个文件夹, #mkdir /root/backup/mysqlbackup 以后在每天五点钟,就会有一个文件保存在这里. 接着新建文件 #vim /roo ...
- SQL第三课-自动编号与初涉约束
自动编号:auto_increment一张数据表中,要设定字段的唯一性,就会用到编号,确保编号的唯一性是避免重名和数据混乱的一种方式.主键,一张表只能并只有一个.在创建字段表时,指定 PRIMARY ...
- Oracle 11gR2 RAC ohasd failed to start 解决方法
rcrCRS-4124: Oracle High Availability Services startup failed. CRS-4000: Command Start failed, or co ...
- asp.net客户端IP跟踪
/// <summary> /// 获取客户端IP地址(无视代理) /// </summary> /// <returns>若失败则返回回送地址</retur ...
- Android几行代码实现实时监听微信聊天
实现效果: 实时监听当前聊天页面的最新一条消息,如图: 实现原理: 同样是利用AccessibilityService辅助服务,关于这个服务类还不了解的同学可以先看下我上一篇关于 ...
- 初探Lambda表达式/Java多核编程【0】从外部迭代到内部迭代
开篇 放假前从学校图书馆中借来一本书,Oracle官方的<精通Lambda表达式:Java多核编程>. 假期已过大半才想起来还没翻上几页,在此先推荐给大家. 此书内容及其简洁干练,如果你对 ...
- 基于basys2用verilog设计多功能数字钟(重写)
话不多说先上图 前言 自从学习FPGA以来,唯一做过的完整系统就是基于basys2得多功能数字表.记得当时做的时候也没少头疼,最后用时间磨出来了一个不是很完整的小系统,当时还是产生了满 ...
- [Bullet3]常见物体和初始化
官方文档:http://bulletphysics.org 开源代码:https://github.com/bulletphysics/bullet3/releases API文档:http://bu ...
- MongoDB与Redis的比较
MongoDB和Redis都是NoSQL,采用结构型数据存储.二者在使用场景中,存在一定的区别,这也主要由于二者在内存映射的处理过程,持久化的处理方法不同. MongoDB建议集群部署,更多的考虑到集 ...



