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. 《Euclidea3》-Eta-07

    Q: 分析:考虑到充分利用三等分和角度的信息,这里我们只需做出一个36°的角即可. 考虑一个顶角是36°的等腰三角形.如下图. 设AD=a1,CD=a2,根据相似,易得a1:a2=(√5-1)/2. ...

  2. centos 安装node js环境

    node.js支持多种平台安装,其中Win平台安装比较简单,下面重点讲解下Linux平台的安装步骤.本文以CentOS平台为实例,不准备讲 解采取源码编译安装方式,而是采取在node.js网站下载已经 ...

  3. 命令行修复MBR分区

    命令行修复MBR 1.shift+F10打开命令行 2.输入:diskpart 3.输入:list disk 查看磁盘信息 4.选择你要操作的磁盘:select disk 0 5.输入:clean,清 ...

  4. system2之:4-文件系统管理(上)

    文件系统 一.文件系统的作用    管理文件和目录的一套机制 1.文件存取 2.文件的查找 3.文件的大小.文件的多少. 4.一个目录可以存放多少个文件 5.文件的命名 6.一个分区可以多大 等   ...

  5. DateGridew导出Excel表+常见错误提示

    在敲机房收费系统的时候,显示数据的时候需要将DateGridew 中的数据导出进Excel表.DateGridew导出Excel表是比较常见的,当然导出Excel表有很多种方法,下面是个人认为比较容易 ...

  6. 【技术文档】《算法设计与分析导论》R.C.T.Lee等·第4章 分治策略

    分治策略有一种“大事化小,小事化了”的境界,它的思想是将原问题分解成两个子问题,两个子问题的性质和原问题相同,因此这两个子问题可以再用分治策略求解,最终将两个子问题的解合并成原问题的解.有时,我们会有 ...

  7. OpenGL中glPushMatrix和glPopMatrix的原理

    glPushMatrix.glPopMatrix操作事实上就相当于栈里的入栈和出栈. 很多人不明确的可能是入的是什么,出的又是什么. 比如你当前的坐标系原点在你电脑屏幕的左上方.如今你调用glPush ...

  8. java中打开说明文档

    if (e.getSource() == itemUseAbout) { // 选择使用说明菜单,打开使用说明的.doc文档            try {                Proce ...

  9. sync fsync fdatasync ---systemtap跟踪

    aa.stp: probe kernel .function ( "sys_sync" ) { printf ( "probfunc:%s fun:%s\n", ...

  10. Apache POI解析excel文件

    这里需要用到poi.jar和poi-ooxml.jar  没有的可以去http://mvnrepository.com/下载 import org.apache.poi.POIXMLDocument; ...