一、关系型数据库SQLIte

  每个应用程序都要使用数据,Android应用程序也不例外,Android使用开源的、与操作系统无关的SQL数据库—SQLite。SQLite第一个Alpha版本诞生于2000年5月,它是一款轻量级数据库,它的设计目标是嵌入式的,占用资源非常的低,只需要几百K的内存就够了。SQLite已经被多种软件和产品使用,Mozilla FireFox就是使用SQLite来存储配置数据的,Android和iPhone都是使用SQLite来存储数据的。

SQLite体系结构图如下:

    

  编译器包括Tokenizer(词法分析器)、 Parser(语法分析器)、Code Generator(代码产生器)。他们协同处理文本形式的结构化查询语句。

  后端由B-tree,Pager,OS Interface组成。B-tree的职责是负责排序,维护多个数据库页之间错综复杂的关系,将页面组织成树状结构,页面就是树的叶子。Pager负责传输,根据B-tree的请求从磁盘读取页面或者写入页面。

  公共服务中有各种实用的功能比如:内存分配、字符串比较,Unicode转换等。

SQLite数据库是D.Richard Hipp用C语言编写的开源嵌入式数据库,支持的数据库大小为2TB。它具有如下特征:

1、轻量级

SQLite和C\S模式的数据库软件不同,它是进程内的数据库引擎,因此不存在数据库的客户端和服务器。使用SQLite一般只需要带上它的一个动态库,就可以享受它的全部功能。而且那个动态库的尺寸也相当小。

2、独立性

SQLite数据库的核心引擎本身不依赖第三方软件,使用它也不需要“安装”,所以在使用的时候能够省去不少麻烦。

3、隔离性

SQLite数据库中的所有信息(比如表、视图、触发器)都包含在一个文件内,方便管理和维护。

4、跨平台

SQLite数据库支持大部分操作系统,除了我们在电脑上使用的操作系统之外,很多手机操作系统同样可以运行,比如Android、Windows Mobile、Symbian、Palm等。

5、多语言接口

SQLite数据库支持很多语言编程接口,比如C\C++、Java、Python、dotNet、Ruby、Perl等,得到更多开发者的喜爱。

6、安全性

SQLite数据库通过数据库级上的独占性和共享锁来实现独立事务处理。这意味着多个进程可以在同一时间从同一数据库读取数据,但只有一个可以写入数据。在某个进程或线程向数据库执行写操作之前,必须获得独占锁定。在发出独占锁定后,其他的读或写操作将不会再发生。

SQLite官方网站(http://www.sqlite.org),了解更多内容请前往。

二、导出查看数据库文件

  在android中,为某个应用程序创建的数据库,只有它可以访问,其它应用程序是不能访问的,数据库位于Android设备/data/data/package_name/databases文件夹中。

  想要将数据库文件导出可以使用eclipse,如图所示:

  查看数据库,使用SQlite Database Browser,如图所示:

三、扩展类

3.1扩展SQLiteOpenHelper

  Android 不自动提供数据库。在 Android 应用程序中使用 SQLite,必须自己创建数据库,然后创建表、索引,填充数据。Android 提供了 SQLiteOpenHelper 帮助你创建一个数据库,你只要继承 SQLiteOpenHelper 类,就可以轻松的创建数据库。SQLiteOpenHelper 类根据开发应用程序的需要,封装了创建和更新数据库使用的逻辑。SQLiteOpenHelper 的子类,至少需要实现三个方法:

  构造函数,调用父类 SQLiteOpenHelper 的构造函数

  onCreate()方法;// TODO 创建数据库后,对数据库的操作(如数据库中的表没创建,则执行此方法。)

  onUpgrage()方法。// TODO 更改数据库版本的操作(根据版本)

  当你完成了对数据库的操作(例如你的 Activity 已经关闭),需要调用 SQLiteDatabase 的 Close() 方法来释放掉数据库连接。

  操作数据库的最佳实践是创建一个辅助类,例如联系人模块

  class ContactsDatabaseHelper extends SQLiteOpenHelper

3.2 Cursor类

Android使用Cursor类返回一个需要的值,Cursor作为一个指针从数据库查询返回结果集,使用Cursor允许Android更有效地管理它们需要的行和列,你使用ContentValues对象存储键/值对,它的put()方法允许你插入不同数据类型的键值。

3.3 数据类型

SQLite 和其他数据库最大的不同就是对数据类型的支持,创建一个表时,可以在 CREATE TABLE 语句中指定某列的数据类型,但是你可以把任何数据类型放入任何列中。当某个值插入数据库时,SQLite 将检查它的类型。如果该类型与关联的列不匹配,则 SQLite 会尝试将该值转换成该列的类型。如果不能转换,则该值将作为其本身具有的类型存储。比如可以把一个字符串(String)放入 INTEGER 列。SQLite 称这为“弱类型”(manifest typing.)。
具体代码:
新建一个DBHelp类扩展yuSQLiteOpenHelper
<pre name="code" class="java"><pre name="code" class="java">public class DBHelper extends SQLiteOpenHelper { private final static int DATABASE_VERSION=1;//数据库版本 private final static String DATABASE_NAME="MyDiary.db";// 数据库名 public DBHelper(Context context) {super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("create table myInfo(_id integer primary key autoincrement," + "title text ,date text,content text)"); }@Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}}

新建一个DBService用于封装数据库的增删改查。
<div><span style="font-family: 'Microsoft YaHei', 'Segoe UI', Tahoma, Arial, Helvetica, sans-serif;">    </span></div><div><pre name="code" class="java">public class DBService {private DBHelper dbHelper;public DBService(Context context){this.dbHelper=new DBHelper(context);}//添加信息public void insert(Info info){SQLiteDatabase db = dbHelper.getWritableDatabase();db.execSQL("insert into myInfo values(null,?,?,?)" ,new String[] { info.getTitle(), info.getDate(),info.getContent()});db.close();}//获取所有的信息public List<Info> getAll(){List<Info> list=new ArrayList<Info>();SQLiteDatabase db=dbHelper.getWritableDatabase();Cursor cursor=db.rawQuery("select * from myInfo",null);if (cursor == null) {return list;}while(cursor.moveToNext()){Info info=new Info();info.setId(cursor.getInt(cursor.getColumnIndex("_id")));info.setTitle(cursor.getString(cursor.getColumnIndex("title")));info.setDate(cursor.getString(cursor.getColumnIndex("date")));info.setContent(cursor.getString(cursor.getColumnIndex("content")));list.add(info);}cursor.close();db.close();return list;}//更新public void update( Info info){SQLiteDatabase db = dbHelper.getWritableDatabase();db.execSQL("update myInfo set title=?,date=?,content=? where _id=?",new String[] { info.getTitle(), info.getDate(),info.getContent(),info.getId()+"" });db.close();}//删除public void delete(Info info){SQLiteDatabase db = dbHelper.getWritableDatabase();db.execSQL("delete from myInfo where _id=?", new String[] { info.getId()+ "" });db.close();}//查询public List<Info> getByTitle(String title){List<Info> list=new ArrayList<Info>();SQLiteDatabase db=dbHelper.getWritableDatabase();Cursor cursor=db.rawQuery("select * from myInfo where title like ?",new String[]{"%"+title+"%"});if (cursor==null){return  list;}while(cursor.moveToNext()){Info info=new Info();info.setId(cursor.getInt(cursor.getColumnIndex("_id")));info.setTitle(cursor.getString(cursor.getColumnIndex("title")));info.setDate(cursor.getString(cursor.getColumnIndex("date")));info.setContent(cursor.getString(cursor.getColumnIndex("content")));list.add(info);}cursor.close();db.close();return list;}
}

此后就可以在就可以在Activity中调用你所封装好的方法了。

Android数据库 之 SQLite数据库相关推荐

  1. Android基础总结+SQlite数据库【申明:来源于网络】

    Android基础总结+SQlite数据库[申明:来源于网络] 基础总结篇之一:Activity生命周期:http://blog.csdn.net/liuhe688/article/details/6 ...

  2. Android中实现SQLite数据库CRUD操作的两种方式

    Android中实现SQLite数据库CRUD操作的两种方式 SQLite是一款轻量级的关系型数据库,具有运行速度.占用资源少的特点.通常只需要几百KB的内存就够了,因此特别适合在移动设备上使用.SQ ...

  3. Android版本升级同时Sqlite数据库的升级及之前数据的保留-转

    http://www.cnblogs.com/wang340/archive/2013/05/06/3063135.html http://www.eoeandroid.com/forum.php?m ...

  4. 基于sqlite的android数据库编程,Android编程之SQLite数据库操作方法详解

    Android编程之SQLite数据库操作方法详解 发布时间:2020-09-07 12:33:04 来源:脚本之家 阅读:85 作者:低调小一 本文实例讲述了Android SQLite数据库操作方 ...

  5. android 数据库索引,SQLite数据库提供警告自动索引(列)升级Android L后

    我已经升级了我的Nexus 7与Android 5.0 Lollipop,之前,我的应用程序运行良好与SQLite数据库,但现在每当我执行任何类型的查询,它给我log cat错误,如: 12-09 1 ...

  6. android之利用SQLite数据库实现登陆和注册

    首先,说一下SQLite的概念: SQLite 是一个开源的嵌入式关系数据库,它可以减少应用程序管理数据的开销 , SQLite 可移植性好 . 很容易使用 . 很小 . 高效而且可靠 .目前在And ...

  7. Android中关于SQLite数据库的一些知识

    使用嵌入式关系型SQLite数据库存储数据 在Android平台上,集成了一个嵌入式关系型数据库-SQLite,SQLite3支持 NULL.INTEGER.REAL(浮点数字).TEXT(字符串文本 ...

  8. Android studio 关于SQlite数据库导出,创建数据库、表以及如何查看操作

    1.首先,你要确定你的模拟器或手机已经Root,若没有,在你的android SDK的platform-tools目录下打开shell命令行· 如,我的是:C:\Users\10378\AppData ...

  9. android 创建文件夹_Android安全(四)数据库 之 SQLite数据库

    每个应用程序都要使用数据,Android应用程序也不例外,Android使用开源的.与操作系统无关的SQL数据库-SQLite.SQLite第一个Alpha版本诞生于2000年5月,它是一款轻量级数据 ...

最新文章

  1. Docker 部署SpringBoot项目不香吗?
  2. ERICA:提升预训练语言模型实体与关系理解的统一框架
  3. LeetCode--024--两两交换链表中的节点(java)
  4. swift如何打印对象的地址
  5. JS获取用户控件中的子控件Id
  6. 使用 read_graphviz 将 GraphViz Dot 文本图加载到 BGL adjacency_list 图的简单示例
  7. Fliptile(状压+思维)
  8. matlab 三维核密度图_Matlab精彩画图示例:三维网状图和三维曲面图
  9. C语言随笔小算法:单项链表如何实现队列
  10. Java入门教程——下载JAVA
  11. 关于vs编译的程序无法正常启动(0xc0150002)的问题
  12. 面试一家公司之前需要做的准备
  13. css中的相对定位、绝对定位、固定定位
  14. 【简单记】用友NC6.5_RCE
  15. 使用jib-maven-plugin分层构建Docker镜像——避免直接使用FatJar
  16. sgm3157功能_SGM3157
  17. Spring AOP 的术语
  18. 发挥数字化平台优势,电子元器件采购商城系统助力企业改变固有低效流程
  19. 异常处理try_except-else-finally
  20. Linux系列 | Ubuntu 各版本号和名称对照【转】

热门文章

  1. PNAS-2018-玉米根际的大规模田间重复研究确定可遗传的微生物
  2. 属于android动画的是什么,下列选项中,属于Android系统的补间动画的是( )
  3. R语言应用str_match函数和str_match_all函数从字符串抽取匹配的字符串模式:str_match函数抽取第一个匹配的字符串模式、str_match_all函数抽取多个匹配的字符串模式
  4. Seaborn可视化使用relplot函数可视化数据长度不同的时间序列实战:two Pandas Series of different lengths
  5. R使用lm构建单变量线性回归模型
  6. python3 模板库 好用_良心整理15个超级Python库,不要错过
  7. 搭建linux下eclipse php完美搭建开发php,搭建linux上的Eclipse+PHP编程环境
  8. LoRDEC的使用(LoRDEC-0.6.tar.gz)
  9. 右键点“工作空间”窗口内空白部分,在弹出的菜单上勾选“Docking View / 停靠式”。然后双击程序窗口的窗棱,就是最上面那条蓝色边框
  10. STM32使用GPIO_WriteBit()函数使LED灯闪烁