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. lightoj 1300 边双联通分量+交叉染色求奇圈

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1300 边双连通分量首先dfs找出桥并标记,然后dfs交叉着色找奇圈上的点.这题只要求在 ...

  2. Android程序的入口点和全局变量设置--application

    首先看看 application的官方文档 我之前一直以为Android程序的入口点就是带MAIN和LAUNCHER的Activity的onCreate方法,看来我是错了~  原来真正的入口点是 Ap ...

  3. MyBatis总结-实现关联表查询

    一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ...

  4. 堆排序中建堆过程时间复杂度O(n)怎么来的?

    首先这个循环是从i = headsize/2 -> 1,也就是说这是一个bottom-up的建堆.于是,有1/2的元素向下比较了一次,有1/4的向下比较了两次,1/8的,向下比较了3次,.... ...

  5. OpenMP与C++:事半功倍地获得多线程的好处

    来源:IIEEG 01-28-2011 在并行计算领域有一个广为流传的笑话——并行计算是未来之事并且永远都是.这个小笑话几十年来一直都是对的.一种类似的观点在计算机架构社区中流传,处理器时钟速度的极限 ...

  6. java+ mysql 给所有的表添加假数据

    需求:别的项目, 代码扣过来了, 数据库也拿过来了, 但是数据库全是空表, 一共700 张表,需求是给表添加假数据,让它能运行起来. 一下是代码实现: 1.数据库连接: public static C ...

  7. ECLIPSE里面SVN图标消失,文件状态不显示问题

    ECLIPSE里面SVN状态图标消失,重新启动eclipse,重新导入工程也不能显示SVN状态图标.这多半是由于之前eclipse没有正常关闭引起的. 解决办法2个: 方法一:1. 在Window&g ...

  8. GDB调试技巧

    1. 查看内存分布 (gdb) info proc mappings 2. 对于类的调试,先通过行号来设断点, 比如:(gdb) b TcpConnection.cc:63 3. 打印数组的内容 (g ...

  9. Centos6.3 配置yum 163源

    1. 下载repo文件    下载地址:http://mirrors.163.com/.help/CentOS6-Base-163.repo 2. 备份并替换系统的repo文件[root@localh ...

  10. Python中的map()函数和reduce()函数的用法

    Python中的map()函数和reduce()函数的用法 这篇文章主要介绍了Python中的map()函数和reduce()函数的用法,代码基于Python2.x版本,需要的朋友可以参考下   Py ...