2、SQLite

  开源轻量级数据库,支持92-SQL标准,主要用于嵌入式系统,只占几百K系统资源此外,SQLite 不支持一些标准的 SQL 功能,特别是外键约束(FOREIGN KEY constrains),嵌套 transcaction 和 RIGHT OUTER JOIN 和 FULL OUTER JOIN, 还有一些 ALTER TABLE 功能

许多开源项目((Mozilla, PHP, Python)都使用了 SQLite.SQLite 由以下几个组件组成:SQL 编译器、内核、后端以及附件

具有如下特性:
  轻量性:只需要一个动态库,就可以享受全部功能,而且动态库尺寸也很小
  独立性:核心引擎不需要依赖第三方软件
  隔离性:数据库所有信息(表、视图、触发器)都放在同一个文件里
  跨平台:支持大部分操作系统,也可以在PC端使用
  安全性:独占性和共享锁来实现事务处理,支持多进程读取数据,只能一个进程修改

有五种常用数据类型:
  NULL:空值
  INTEGER:整形
  REAL:浮点型
  VARCHAR:字符型
  BLOB:大数据

注意:SQLite不支持BOOLEAN和DATE,因此可以用0,1代替BOOLEAN(其它数据库也经常这么干)
INTEGER或VARCHAR代替DATE,更多参考资料http://www.sqlite.org/

在Android系统中提供了android.database.sqlite包,用于进行SQLite数据库的增、删、改、查工作。其主要方法如下:

1、创建数据库连接

         // 创建数据库的两种方法,推荐第一种,第二种使用绝对路径,较繁杂
SQLiteDatabase db = this.openOrCreateDatabase("test_db.db", Context.MODE_PRIVATE, null);
SQLiteDatabase db2 = SQLiteDatabase.openOrCreateDatabase("/data/data/com.example.sqlite/databases/test_db2.db", null);

创建完/data/data/com.example.sqlite/databases/ 会有两个数据库文件。

2、创建tab表,有两个字段_id和name,其中_id为自增序列,name不为空。

         // 创建tab表
db.execSQL("create table tab(_id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL)");

3、插入数据

         //插入数据
// 类似map,键值对存储数据
ContentValues values = new ContentValues();
for (int i = 0; i < 5; i++) {
values.put("name", "test"+i);
// 插入到数据库,参数:表名, 指定表中的某列列名,数据
db.insert("tab", "_id", values);
}

4、修改数据

         // 修改
ContentValues values2 =new ContentValues();
values2.put("name", "name");
// 更改数据,参数分别:表名、新数据、where条件、子句(可为null)
db.update("tab", values2, "_id=1", null);
// where条件?为占位符,最后一个参数可替换占位符
db.update("tab", values2, "_id=?", new String[]{"10"});

将数据库文件拷贝到本地电脑可以用 SQLite Expert Personal 3查看,修改后_id为0和10的name列 值都改掉了。

由于我程序执行了4次,多插入3遍,因此有20条记录。

5、查询数据

         //查询数据两种方法query、rawQuery
// Cursor指游标,学过数据库的都知道吧,后面跟一系列参数,目标表名、where子句、order by子句、having子句等可不记,用第二种方法
Cursor c = db.query("tab", null, null, null, null, null, null);
// 在第一次读取Cursor对象中的数据时,一定要先移动游标,否则此游标的位置在第一条记录之前,会引发异常
c.moveToFirst();
while(!c.isAfterLast()){
int index = c.getColumnIndex("name");
Log.d("SQLite", c.getString(index));
c.moveToNext();
} //推荐用这种,不需记那么多参数
c = db.rawQuery("select * from tab", null);
c.moveToFirst();
while(!c.isAfterLast()){
int index = c.getColumnIndex("name");
Log.d("SQLite", c.getString(index));
c.moveToNext();
}

日子打印结果:

针对游标的常用方法说明:

6、删除数据和关闭连接

         // 删除数据
db.delete("tab", "_id=? or name=?", new String[]{"8", "test0"}); // 关闭数据库连接,释放资源
db.close();

实际开发是继承数据库的辅助类SQLiteOpenHelper来方便操作的,主要做的工作就是重写以下两个方法:

onCreate(SQLiteDatabase db) : 当数据库被首次创建时执行该方法,一般将创建表等初始化操作在该方法中执行。
onUpgrade(SQLiteDatabse dv, int oldVersion,int new Version):当打开数据库时传入的版本号与当前的版本号不同时会调用该方法。

除了上述两个必须要实现的方法外,还可以选择性地实现onOpen 方法,该方法会在每次打开数据库时被调用。

一般的代码结构:

 public class DatabaseHelper extends SQLiteOpenHelper {

     private static final String DB_NAME = "mydata.db"; //数据库名称
private static final int version = 1; //数据库版本 public DatabaseHelper(Context context) {
super(context, DB_NAME, null, version);
// TODO Auto-generated constructor stub
} @Override
public void onCreate(SQLiteDatabase db) {
String sql = "create table user(username varchar(20) not null , password varchar(60) not null );";
db.execSQL(sql);
} @Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub } }

android学习日记13--数据存储之SQLite的更多相关文章

  1. Android 学习笔记之数据存储SharePreferenced+File

    学习内容: Android的数据存储.... 1.使用SharedPreferences来保存和读取数据... 2.使用File中的I/O来完成对数据的存储和读取...   一个应用程序,经常需要与用 ...

  2. android学习日记13--数据存储之SharedPreference

    android 数据存储 作为一个完整的应用程序,数据存储必不可少.android 提供了五种不同的数据存储方式:SharedPreferences.SQLite.ContentProvider.文件 ...

  3. Android开发手记(18) 数据存储三 SQLite存储数据

    Android为数据存储提供了五种方式: 1.SharedPreferences 2.文件存储 3.SQLite数据库 4.ContentProvider 5.网络存储 SQLite 是以嵌入式为目的 ...

  4. android学习日记13--数据存储之File存储

    4.文件存储File File即传统的I/O 流存储文件,Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件中是一样的 ...

  5. android学习日记13--数据存储之ContentProvide

    3.ContentProvider 数据在Android当中是私有的,当然这些数据包括文件数据和数据库数据以及一些其他类型的数据.ContentProvider实现多应用程序间的数据共享类一般利用Co ...

  6. Android开发8:数据存储(二)——SQLite数据库和ContentProvider的使用

    前言 啦啦啦各位小伙伴们许久不见了~学期末和过年期间自己忙着做其他事没能及时更新Android开发系列课程的博客,实在是罪过罪过~ 好啦~废话不多说,进入我们今天的主题.今天我们将和大家学习其他的数据 ...

  7. Android数据存储之SQLite的操作

    Android作为一个应用在移动设备上的操作系统,自然也就少不了数据的存储.然而SQLite作为一个轻型的关系型数据库,基于其轻量.跨平台.多语言接口及安全性等诸多因数考虑,因而Android较大的数 ...

  8. Android数据存储:SQLite

    Android数据存储之SQLite SQLite:Android提供的一个标准的数据库,支持SQL语句.用来处理数据量较大的数据.△ SQLite特征:1.轻量性2.独立性3.隔离性4.跨平台性5. ...

  9. Android数据存储之SQLite数据库

    Android数据存储 之SQLite数据库简介 SQLite的相关知识,并结合Java实现对SQLite数据库的操作. SQLite是D.Richard Hipp用C语言编写的开源嵌入式数据库引擎. ...

随机推荐

  1. bzoj1001

    平面图求最小割: 其实看bzoj1001一开始着实把我怔住了 AC的人暴多,可自己完全没思路 后来看了某大牛的ppt,才会做 一个月前做这题的吧,今天来简单回忆一下: 首先是欧拉公式 如果一个连通的平 ...

  2. JAVA方法和本地方法(转载)

    转载自:http://blog.sina.com.cn/s/blog_5b9b4abe01016zw0.html JAVA中有两种方法:JAVA方法和本地方法   JAVA方法是由JAVA编写的,编译 ...

  3. EntityFramework版本下载和更新

    安装指定版本的Package(例如:EntityFramework 5.0): PM> Install-Package EntityFramework -ProjectName MusicSto ...

  4. TortoiseSVN中分支和合并实践

    使用svn几年了,一直对分支和合并敬而远之,一来是因为分支的管理不该我操心,二来即使涉及到分支的管理,也不敢贸然使用合并功能,生怕合并出了问题对团队造成不良影响,最主要的原因是,自己对分支的目的和合并 ...

  5. java jvm学习笔记四(安全管理器)

    欢迎装载请说明出处:http://blog.csdn.net/yfqnihao 前面已经简述了java的安全模型的两个组成部分(类装载器,class文件校验器),接下来学习的是java安全模型的另外一 ...

  6. 算法 后减前最大值,zt

    一个人知道未来n天的每天股票的价格,请你给出一个算法,使得这个人从哪天买入,哪天卖出能获得最大的收益. 问题实际上就是求一个数组后面元素减前面元素的最大值 #include <stdio.h&g ...

  7. OWASP Top 10 – 2013, 最新十大安全隐患(ASP.NET解决方法)

    OWASP(开放Web软体安全项目- Open Web Application Security Project)是一个开放社群.非营利性组织,目前全球有130个分会近万名会员,其主要目标是研议协助解 ...

  8. 《Oracle Database 12c DBA指南》第二章 - 安装Oracle和创建数据库(2.1 安装Oracle数据库软件和创建数据库概览)

    当前关于12c的中文资料比较少,本人将关于DBA的一部分官方文档翻译为中文,很多地方为了帮助中国网友看懂文章,没有按照原文句式翻译,翻译不足之处难免,望多多指正. 2.1 安装Oracle数据库软件和 ...

  9. python 网络编程(一)---基础

    1.理解TCP 1.1 寻址 首先任何基于TCP/IP的网络,每台机器都有唯一的IP地址,只需要知道接受者机器的IP地址,信息就可以传送过去. 其次,TCP通过使用端口号来知道机器究竟是哪个程序应该接 ...

  10. 数论——lucas定理

    网上证明很多,虽然没看懂.... 主要解决大组合数取模的情况 费马小定理求大组合数: a^(p-1)=1%p; 两边同除a a^(p-2)=1/a%p; C(n,m)= n!/(m!*(n-m)!) ...