(一)、简介:
  1. Android通过 SQLite 数据库引擎来实现结构化数据的存储。在一个数据库应用程序中,任何类都可以通过名字对已经创建的数据库进行访问,但是在应用程序之外就不可以。
  2. SQLite 数据库是一种用C语言编写的嵌入式数据库,它是一个轻量级的数据库,最初为嵌入式设计的。它是在一些基础简单的语句处理上要比oracle / mysql快很多,而且其对内存的要求很低,在内存中只需要几百KB的存储空间。这是Android中采用 SQLite 数据库的主要原因。
  3. SQLite 支持事务处理功能。Transaction
  4. SQLite 处理速度比MySQL等著名的开源数据库系统更快。它没有服务器进程。
  5. SQLite 通过文件保存数据库,该文件是跨平台的,可以自由复制。一个文件就是一个数据库。数据库名即文件名。
  6. JDBC会消耗太多系统资源,所以JDBC对于手机并不合适,因此Android提供了新的API来使用 SQLite 数据库。
 
三、SQLiteDatabase类:
SQLiteDatabase等同于JDBC中Connection和Statement的结合体。SQLiteDatabase既代表与数据库的连接,又只能用于执行sql语句操作。
(一)、操作 SQLite 数据库的步骤:【重要】
1、创建 SQLiteDatabase 对象,它代表与数据库的连接;
2、创建数据库中的表(执行CREATE);
3、调用SQLiteDatabase 对象执行数据库操作(执行DML);
4、对查询后的结果集Cursor进行处理。
 
(二)、操作 SQLite 数据库的步骤详细讲解:
1、创建 SQLite 数据库对象:SQLiteDatabase对象代表一个数据库。 SQLiteDatabase提供了几个静态方法来打开一个文件对应的数据库。
  • static  SQLiteDatabase  openDatabase(String path, SQLiteDatabase.CursorFactory factory, int flags, DatabaseErrorHandler errorHandler)
  • static  SQLiteDatabase  openDatabase(String path, SQLiteDatabase.CursorFactory factory, int flags)
  • static  SQLiteDatabase  openOrCreateDatabase(String path, SQLiteDatabase.CursorFactory factory, DatabaseErrorHandler errorHandler)
  • static  SQLiteDatabase  openOrCreateDatabase(String path, SQLiteDatabase.CursorFactory factory)
【备注:】打开数据库的参数:
1、参数中的path代表着数据库的路径(如果是在默认路径/data/data/<package_name>/databases/下,则这里只需要提供数据库名称);
2、factory代表着在创建Cursor对象时,使用的工厂类,如果为null的话,则使用默认的工厂(这里我们可以实现自己的工厂进行某些数据处理);
3、flags代表的是创建表时的一些权限设置,多个权限之间用|分隔:
  • OPEN_READONLY :代表的是以只读方式打开数据库(常量值为:1)
  • OPEN_READWRITE:代表以读写方式打开数据库(常量值为:0)
  • CREATE_IF_NECESSARY:当数据库不存在时创建数据库
  • NO_LOCALIZED_COLLATORS:打开数据库时,不根据本地化语言对数据库进行排序(常量值为:16)

代码:

//当数据库存在时:
String path = SDCardHelper.getSDCardRoot() + File.separator + "steven" + File.separator + "android_manual.db";
SQLiteDatabase db = SQLiteDatabase.openDatabase(path, null,SQLiteDatabase.OPEN_READWRITE);
Cursor cursor = db.rawQuery("select * from android_basic order by id desc limit 0 , 15",null);

//当数据库不存在时:
String path = SDCardHelper.getSDCardRoot() + File.separator + "steven" + File.separator + "words.db";
SQLiteDatabase  db = SQLiteDatabase.openOrCreateDatabase(path, null);
db.execSQL("create table tb_words (_id integer primary key autoincrement ,english , chinese)");

创建表:
SQLiteDatabase  db = SQLiteDatabase.openOrCreateDatabase(path, null);
db.execSQL("create table tb_words (_id integer primary key autoincrement ,english , chinese)");
String path = SDCardHelper.getSDCardRoot() + File.separator + "steven" + File.separator + "words.db";

主意:
一。SQLite的数据类型?
        首先你会接触到一个让你惊讶的名词: Typelessness(无类型)。其实SQLite是无类型的。这意味着你可以保存任何类型的数据到数据库表的任何列中, 无论这列声明的数据类型是什么。对于SQLite来说对字段不指定类型是完全有效的。如:create table dict(_id integer primary key autoincrement , word , detail);
       
    注意:这里一定要注意,SQLite数据库在一种情况下是要求类型匹配的,当我们建表是如create table table1(id integer primary key),sqlite对应一位integer primary key的列值允许你存储64位的整数。必须是INTEGER PRIMARY KEY  AUTOINCREMENT。
        诚然SQLite允许忽略数据类型, 但是仍然建议在你的Create Table语句中指定数据类型. 因为数据类型对于你和其他的程序员交流, 或者你准备换掉你的数据库引擎时能起到一个提示或帮助的作用。

 
 
二、调用SQLiteDatabase 对象的方法执行数据库操作:【重要】
  1. execSQL(String sql , Object[] args)    执行带占位符的sql语句(update,insert,delete语句)
  2. rawQuery( String sql , String[] args )   执行带占位符的sql查询(select语句)
  3. beginTransaction()    开始事务
  4. endTransaction()   结束事务
【备注:】除了以上重要的四个方法外,Android考虑到不熟悉sql语句的开发者,提供了进一步封装后的一系列方法。但是以下这几个方法参数众多,平时不建议使用,但是一定也要掌握,在ContentProvider中会有类似的方法,要注意区分。
  1. insert()
  2. update()
  3. delete()
  4. query()

三、对查询结果进行操作。当执行的是select语句,返回一个Cursor对象。Cursor类似于JDBC中的ResultSet结果集,内置移动游标等方法:

  • move(int offset)    按偏移量来移动
  • moveToFirst()   将记录指针移动到第一行
  • moveToLast ()   将记录指针移动到最后一行
  • moveToNext ()      将记录指针移动到下一行
  • moveToPosition(int position)       将记录指针移动到指定的一行
  • moveToPrevious()      将记录指针移动到上一行
  • getCount()    返回Cursor的行数
  • getColumnName(int index)    根据列的索引返回其相应的列名称
  • getColumnIndex(String name)    根据列的名字返回其相应的索引
  • getColumnNames()       返回一个保存有所有列名称的字符串数组
  • getColumnCount()    返回列的总数
  • close()   关闭游标结果集,释放资源
  • getType()    获取字段的数据类型。分别有0、1、2、3、4这几个结果。
    • 0: 代表null
    • 1:代表int
    • 2:代表float
    • 3:代表String
    • 4:代表blob
 
(四)、事务:【重要】
        数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完整地执行,要么完全地不执行。事务的目的是为了保证数据的一致性。 

SQLiteDatabase浅谈的更多相关文章

  1. 浅谈 Fragment 生命周期

    版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Fragment 文中如有纰漏,欢迎大家留言指出. Fragment 是在 Android 3.0 中 ...

  2. 浅谈 LayoutInflater

    浅谈 LayoutInflater 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/View 文中如有纰漏,欢迎大家留言指出. 在 Android 的 ...

  3. 浅谈Java的throw与throws

    转载:http://blog.csdn.net/luoweifu/article/details/10721543 我进行了一些加工,不是本人原创但比原博主要更完善~ 浅谈Java异常 以前虽然知道一 ...

  4. 浅谈SQL注入风险 - 一个Login拿下Server

    前两天,带着学生们学习了简单的ASP.NET MVC,通过ADO.NET方式连接数据库,实现增删改查. 可能有一部分学生提前预习过,在我写登录SQL的时候,他们鄙视我说:“老师你这SQL有注入,随便都 ...

  5. 浅谈WebService的版本兼容性设计

    在现在大型的项目或者软件开发中,一般都会有很多种终端, PC端比如Winform.WebForm,移动端,比如各种Native客户端(iOS, Android, WP),Html5等,我们要满足以上所 ...

  6. 浅谈angular2+ionic2

    浅谈angular2+ionic2   前言: 不要用angular的语法去写angular2,有人说二者就像Java和JavaScript的区别.   1. 项目所用:angular2+ionic2 ...

  7. iOS开发之浅谈MVVM的架构设计与团队协作

    今天写这篇博客是想达到抛砖引玉的作用,想与大家交流一下思想,相互学习,博文中有不足之处还望大家批评指正.本篇博客的内容沿袭以往博客的风格,也是以干货为主,偶尔扯扯咸蛋(哈哈~不好好工作又开始发表博客啦 ...

  8. Linux特殊符号浅谈

    Linux特殊字符浅谈 我们经常跟键盘上面那些特殊符号比如(?.!.~...)打交道,其实在Linux有其独特的含义,大致可以分为三类:Linux特殊符号.通配符.正则表达式. Linux特殊符号又可 ...

  9. 浅谈Angular的 $q, defer, promise

    浅谈Angular的 $q, defer, promise 时间 2016-01-13 00:28:00  博客园-原创精华区 原文  http://www.cnblogs.com/big-snow/ ...

随机推荐

  1. HTTP协议开发应用-HTTP&XML协议栈开发

    Netty HTTP+XML协议栈开发 由于HTTP协议的通用性,很多异构系统间的通信交互采用HTTP协议,通过HTTP协议承载业务数据进行消息交互,例如非常流行的HTTP+XML或者RESTful+ ...

  2. hdu 3449 有依赖性的01背包

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=3449  Consumer Description FJ is going to do so ...

  3. 《DSP using MATLAB》示例Example4.10

    上代码: b = [1, 0.4*sqrt(2)]; a = [1, -0.8*sqrt(2), 0.64]; % compute the polynomials coefficients given ...

  4. Block与代理的使用

    本人其实是比较喜欢用Block的,因为用block写出来的代码,让我感觉代码要紧凑一些,看起来的时候,思路要清晰些,所以这估计也就是现在block将要代替代理的原因所在吧! 下面,直接进入主题: 一. ...

  5. SolrCloud-4.10.2源代码启动流程梳理

    SolrCloud-4.10.2源代码 web.xml中filter配置 SolrDispatchFilter <filter-name>SolrRequestFilter</fil ...

  6. iOS学习31之UITableVIewCell自定义

    1. 自定义Cell 1> 为什么要自定义Cell UITableView 中系统的Cell共提供了四种默认样式,  分别是: UITableViewCellStyleDefault UITab ...

  7. Diophantus of Alexandria[HDU1299]

    Diophantus of Alexandria Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Ot ...

  8. CUDA程序设计(二)

    算法设计:直方图统计 直方图频数统计,也可以看成一个字典Hash计数.用处不是很多,但是涉及CUDA核心操作:全局内存.共享内存.原子函数. 1.1  基本串行算法 这只是一个C语言练习题. #def ...

  9. Leetcode ReorderList

    Given a singly linked list L: L0→L1→…→Ln-1→Ln,reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→… You must do thi ...

  10. ACM: 限时训练题解-Epic Professor-水题

    Epic Professor   Dr. Bahosain works as a professor of Computer Science at HU (Hadramout    Universit ...