SQLite 介绍

  SQLite 一个非常流行的嵌入式数据库,它支持 SQL 语言,并且只利用很少的内存就有很好的性能。

    此外它还是开源的,任何人都可以使用它。许多开源项目((Mozilla, PHP, Python)都使用了 SQLite.

  SQLite 由以下几个组件组成:SQL 编译器、内核、后端以及附件。

  SQLite 通过利用虚拟机和虚拟数据库引擎(VDBE),使调试、修改和扩展 SQLite 的内核变得更加方便。

SQLite 内部结构

原文 http://www.ibm.com/developerworks/cn/opensource/os-cn-sqlite/index.html


SQLite的优点:

  1. 轻量级

    使用 SQLite 只需要带一个动态库,就可以享受它的全部功能, 而且那个动态库的尺寸想当小。


  2. 独立性

    SQLite 数据库的核心引擎不需要依赖第三方软件,也不需要所谓的“安装”。


  3. 隔离性

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


  4. 跨平台

    SQLite 目前支持大部分操作系统,不至电脑操作系统更在众多的手机系统 也是能够运行,比如:Android。


  5. 多语言接口

    SQLite 数据库支持多语言编程接口。


  6. 安全性

    SQLite 数据库通过数据库级上的独占性和共享锁来实现独立事务处理。 这意味着多个进程可以在同一时间从同一数据库读取数据, 但只能有一个可以写入数据。


 

在Android中连接SQLite需要先创建一个类,并且继承个类extends SQLiteOpenHelper

package com.example.sqlite;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper; public class MyOpenHelper extends SQLiteOpenHelper { /**
* @param context 上下文
* name: 数据库的名字
* factory 目的创建 cursor 对象
* version 数据库的版本 从1开始
*/
public MyOpenHelper(Context context) {
super(context, "itheima.db", null, 1);
// super(context, name, factory, version);
} /**
* Called when the database is created for the first time. This is where the creation of tables and the initial population of the tables should happen.
* 当数据库第一次创建的时候调用
* 那么这个方法特别适合做表结构的初始化 创建表就是写 sql 语句
*/
public void onCreate(SQLiteDatabase db) {
// id 一般以 _d 下划线开头
String sql ="create table wx_user(" +
"id int primary key," +
"name varchar(30)," +
"tou varchar(20)," +
"content varchar(50)," +
"dateTime varchar(30)" +
")";
      db.execSQL(sql);
} /**
* Called when the database needs to be upgraded.
* 当数据库版本升级的时候调用
* 这个方法适合做什么 表结构的更新
*
*/
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("alter table info add phone varchar(20)");
} }

MyOpenHelper


这里创建了数据库类,接下来是往数据库中插入数据;

    //方法一
    // 创建数据库
MyOpenHelper helper = new MyOpenHelper(this);
SQLiteDatabase db = helper.getWritableDatabase(); // ContentValues 其实是一个map 对象 google 工程师封装的方法
ContentValues values = new ContentValues(); // 一一对应填充数据
     values.put("id",1);
values.put("name", "android");
values.put("tou", "xxx");
values.put("content", "今天学习了SQLite");
values.put("dateTime", "11月29号"); db.insert("t_Message", null, values);
// 方法二:使用sql 语句
String sql = "insert into t_Message(id,name,tou,content,datetime) values(?,?,?,?,?)";
//
String[] sqlVales = {2, "oracle", "aaa", "oracle快忘记了", "11月20日" };
db.execSQL(sql, sqlVales);
// 关闭数据库连接
db.close();

插入数据一


 
// 方法三
//往数据库中插入数据的代码,在这里使用的是execSQL(sql);
for(int i=3;i<20;i++){
String sql = "insert into wx_user(id,name,tou,content,dateTime) values("+i+",'oracle"+i+"','aa','oracle是什么','11月19日')";
sqlDatabase.execSQL(sql);
}

插入数据三


往数据库中参入数据之后,我们再将数据库中的数据取出来看看;我们需要先创建一个实体类;

package com.example.entiy;

// 创建实体类
public class unserInFo {
private int id;
private String name;
private String dateTime;
private String tou;
private String content;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDateTime() {
return datetime;
}
public void setDateTime(String dateTime) {
this.dateTime= dateTime;
}
public String getTou() {
return tou;
}
public void setTou(String tou) {
this.tou = tou;
}
public String toString() {
return "unserInFo [id="+id+,"name=" + name + ", dataTime=" + dataTime+ ", tou=" + tou+ "]";
}
public unserInFo() {
super();
} }

创建实体类


获取数据

//定义一个集合用来存放所有的结果
List<unserInFo> user = new ArrayList<unserInFo>();
//通过游标来获取表wx_user的信息,
Cursor c=sqlDatabase.query("wx_user", null, null, null, null, null, null);
//先判断是否有第一条数据(ic.moveToFirst()将游标移到第一条数据,如果没有第一条数据则返回false,否则返回true)
if(c.moveToFirst()){
//通过getCount()来决定循环的次数getCount()是游标的总数量。
for (int i = 0; i<c.getCount();i++) {
unserInFo uif = new unserInFo(); //将游标移动到下一条数据
c.moveToNext();
uif.setId(c.getInt(c.getColumnIndex("id")));
uif.setLastdate(c.getString(c.getColumnIndex("dateTime")));
uif.setName(c.getString(c.getColumnIndex("name")));
uif.setZhao(c.getString(c.getColumnIndex("tou")));
uif.setContent(c.getString(c.getColumnIndex("content")));
user.add(uif); }
}
//最后数据库中获取到的数据就全部存放到user集合中了,我们只需要遍历user就能显示数据了。

获取数据


SQLiteOpenHelper是SQLiteDatabase的一个帮助类, 用来管理数据库的创建和版本的更新。

一般是建立一个类继承它,并实现它的onCreate和onUpgrade方法。 常用的方法有:

onCreate(SQLiteDatabase db)

创建数据库时调用

onUpgrade(SQLiteDatabase db,int oldVersion , int newVersion)

版本更新时调用

getReadableDatabase()

创建或打开一个只读数据库

getWritableDatabase()

创建或打开一个读写数据库

1.SQLiteDatabase类

常用方法:

(int) delete(String table,String whereClause,String[] whereArgs)  删除数据行的便捷方法

(long) insert(String table,String nullColumnHack,ContentValues values)

添加数据行的便捷方法

(int) update(String table, ContentValues values, String whereClause, String[] whereArgs)

更新数据行的便捷方法
(void) execSQL(String sql)

执行一个SQL语句,可以是一个select或其他的sql语句

(void) close() 关闭数据库

(Cursor) query(String table, String[] columns, String selection,

  String[] selectionArgs, String groupBy, String having, String orderBy, String limit)

查询指定的数据表返回一个带游标的数据集

(Cursor) rawQuery(String sql, String[] selectionArgs)

运行一个预置的SQL语句,返回带游标的数据集

(与上面的语句最大的区别就是防止SQL注入)

2.SQLiteDatabase类

使用insert方法

ContentValues cv = new ContentValues();  // 实例化一个ContentValues用来装载待插入的数据

cv.put("username","Jack Johnson");     // 添加用户名

cv.put("password","iLovePopMusic");      // 添加密码

db.insert("user",null,cv);            // 执行插入操作

实例化一个ContentValues

使用execSQL方式来实现

String sql = "insert into user(username,password) values ('Jack Johnson','iLovePopMuisc');  //插入操作的SQL语句

db.execSQL(sql);  //执行SQL语句

插入SQL语句

数据的删除

String whereClause = "username=?";    // 删除的条件

String[] whereArgs = {"Jack Johnson"};    // 删除的条件参数

db.delete("user",whereClause,whereArgs);   // 执行删除 

String sql = "delete from user where username='Jack Johnson'";  // 删除操作的SQL语句

db.execSQL(sql);  // 执行删除操作

删除语句

数据修改

ContentValues cv = new ContentValues();      // 实例化

ContentValues cv.put("password","iHatePopMusic"); // 添加要更改的字段及内容

String whereClause = "username=?";        // 修改条件

String[] whereArgs = {"Jack Johnson"};        // 修改条件的参数

db.update("user",cv,whereClause,whereArgs);    // 执行修改 

String sql = "update [user] set password = 'iHatePopMusic' where username='Jack Johnson'";  // 修改的SQL语句

db.execSQL(sql);    // 执行修改

更改

数据查询

通过query实现查询的

public Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)

table

表名称

column

列名称数组

selection

条件子句,,相当于where

selectionArgs

条件语句的参数数组

groupBy

分组

having

分组条件

orderBy

排序类

limit

分页查询的限制

Cursor

返回值,相当于结果集resultSet

游标(Cursor)

getCount()

总记录条数

isFirst()

判断是否第一条记录

isLast()

判断是否最后一条记录

moveToFirst()

移动到第一条记录

moveToLast()

移动到最后一条记录

move(int offset)

移动[是指偏移量而不是指移到指定位置]

moveToNext()

移动到吓一条记录

moveToPrevious()

移动到上一条记录

getColumnIndex(String columnName)

获得指定列索引的int类型值

游标(Cursor)
Cursor c = db.query("user",null,null,null,null,null,null);//查询并获得游标
if(c.moveToFirst()){//判断游标是否为空
    for(int i=0;i<c.getCount();i++){
        c.moveToNext();
        String username = c.getString(c.getColumnIndex("username");
        String password = c.getString(c.getColumnIndex("password"));
    }

rawQuery实现的带参数查询

Cursor c = db.rawQuery("select * from user where username=?",new Stirng[]{"Jack Johnson"});
if(cursor.moveToFirst()) {
    String password = c.getString(c.getColumnIndex("password"));
}

http://www.cnblogs.com/shanyou/archive/2007/01/08/615245.html

Android 开发中使用 SQLite 数据库的更多相关文章

  1. 在Android 开发中使用 SQLite 数据库笔记

    SQLite 介绍   SQLite 一个非常流行的嵌入式数据库,它支持 SQL 语言,并且只利用很少的内存就有很好的性能.此外它还是开源的,任何人都可以使用它.许多开源项目((Mozilla, PH ...

  2. android开发之使用SQLite数据库存储

    http://blog.csdn.net/jason0539/article/details/16360835 SQLite 介绍 SQLite 一个非常流行的嵌入式数据库,它支持 SQL 语言,并且 ...

  3. Android虚拟机中的sqlite数据库文件

    Android虚拟机中的sqlite数据库文件 ①

  4. 在安卓开发中使用SQLite数据库操作实例

    前段时间写了个安卓平台下SQLite数据库操作的实例 ,一直没得时间总结 ,今天把它弄出来了. 在Android 运行时环境包含了完整的 SQLite. 首先介绍一下SQLite这个数据库: SQLi ...

  5. android开发之使用SQLite数据库(db文件)

    在开发中,有时须要使用db文件数据库.所以就须要将其导入项目,再将其使用程序写入到应用的db文件下使用. 代码非常easy.能够拿来直接使用. 要使用须要两个步骤: 1.创建raw文件.导入db文件. ...

  6. C# Android 开发中使用 Sqlite.NET ORM

    开发环境:VS2015 Xamarin Sqlite.NET ORM 不就相当于 Entiry Framework For Xamarin 吗? 相当于用 C# 开发安卓程序访问 Sqlite 可以使 ...

  7. 【转】Android开发中的SQLite事务处理,即beginTransaction()方法

    使用SQLiteDatabase的beginTransaction()方法可以开启一个事务,程序执行到endTransaction() 方法时会检查事务的标志是否为成功,如果程序执行到endTrans ...

  8. Android开发中的SQLite事务处理,即beginTransaction()方法

    使用SQLiteDatabase的beginTransaction()方法可以开启一个事务,程序执行到endTransaction() 方法时会检查事务的标志是否为成功,如果程序执行到endTrans ...

  9. Android 开发中 SQLite 数据库的使用

    SQLite 介绍 SQLite 一个非常流行的嵌入式数据库,它支持 SQL 语言,并且只利用很少的内存就有很好的性能.此外它还是开源的,任何人都可以使用它.许多开源项目((Mozilla, PHP, ...

随机推荐

  1. IOS中UITableViewCell的重用机制原理

    创建UITableViewController子类的实例后,IDE生成的代码中有如下段落: - (UITableViewCell *)tableView:(UITableView *)tableVie ...

  2. [Unity-24] Unity的四种载入场景的方法

    Unity官方提供了4种载入场景(scene)的方法.各自是: 1. Application.LoadLevel():同步载入 2. Application.LoadLevelAsync():异步载入 ...

  3. (转) Unity3D中角色的动画脚本的编写(三)

    在上一篇,我们具体的讲解了有关动画的融合,也提到了有关动画状态的权重问题.那么这次,我来以一个例子的形式来向大家讲解动画的叠加,或许会涉及到多方面的知识,我力求一次讲清.好了,我们开始吧! 首先我们必 ...

  4. 深入分析 Java 中的中文编码问题--转

    几种常见的编码格式 为什么要编码 不知道大家有没有想过一个问题,那就是为什么要编码?我们能不能不编码?要回答这个问题必须要回到计算机是如何表示我们人类能够理解的符号的,这些符号也就是我们人类使用的语言 ...

  5. yii columns value and type and checkbox columns

    value  I am here type  I am here checkbox columns   useage

  6. Codeforces Round #291 (Div. 2) C - Watto and Mechanism 字符串

    [题意]给n个字符串组成的集合,然后有m个询问(0 ≤ n ≤ 3·105, 0 ≤ m ≤ 3·105) ,每个询问都给出一个字符串s,问集合中是否存在一个字符串t,使得s和t长度相同,并且仅有一个 ...

  7. ubuntu 配置Java jdk

    本文参考:http://www.cnblogs.com/memory4young/p/ubuntu-install-jdk.html 一.下载 到oracle官方网站下载jdk,博主下载时的版本是8u ...

  8. asp.net错误日志写入

    当我们一个web项目开发已完成,测试也通过了后,就把他放到网上去,但是,bug是测不完的,特别是在一个大的网络环境下.那么,我们就应该记录这些错误,然后改正.这里,我的出错管理页面是在global.a ...

  9. 什么是mimeType?

    因特网多媒体邮件扩展标示内容是什么格式.告诉浏览器或者server如何解析该数据http的请求和相应都含有一个mimeType字段 =>content-type(通用首部)

  10. Web字体库下载及转换工具

    1.字体现在网站: http://ztxz.org/ 2.Web字体在线格式转换器: http://www.freefontconverter.com/ 3.