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. hdu4696 想法题

    就像1.2元人民币可以凑成任意你想要的面值一样.由于一定会有环,只要有C[i] == 1 就可以造成任何数.够坑吧 #include <cstdio> #include <cstri ...

  2. IT项目经理应具备的十大软技能

    现在,企业对IT部项目经理的要求越来越多.如果你认为IT项目成员只需要技术性能力,那可就错了. 据IT招聘公司调查发现,几年人们对项目管理软技能的兴趣明显浓厚起来.许多企业尽量避免把IT部门看成只是成 ...

  3. android.view.WindowLeaked解决办法

    08-07 14:51:28.129: E/WindowManager(22277): Activity com.xxx.xxx.xxx.xxx.LoginActivity has leaked wi ...

  4. Android ViewPager PagerAdapter 图片轮播

    ViewPager类直接继承了ViewGroup类,所有它是一个容器类,可以在其中添加其他的View类. ViewPager类需要一个PagerAdapter适配器类给它提供数据. ViewPager ...

  5. 利用d3.js绘制雷达图

    利用d3,js将数据可视化,能够做到数据与代码的分离.方便以后改动数据. 这次利用d3.js绘制了一个五维的雷达图.即将多个对象的五种属性在一张图上对照. 数据写入data.csv.数据类型写入typ ...

  6. ubuntu 安装 flash player

    ubuntu 软件中心里的 flash , 虽说写的支持 chrome , 但安装总不管用 可运行以下两个命令, 再重启 chrome 浏览器 (注意,一定要把打开的浏览器全部关闭, 再打开才可以) ...

  7. HeaderViewListAdapter

    该类其实就是普通使用的Adapter的一个包装类,就是为了添加header和footer而定义的.该类一般不直接使用,当ListView有header和footer时,ListView中会自动把Ada ...

  8. Android手机适配——UI图片适配

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/50727753 在Android项目当中,drawable文件夹都是用来放置图片资源 ...

  9. ADLINK 8158控制程序-连续运动(VB.NET)

    运动平台:日脉的二维运动平台(一个旋转平台和一个滑动平台) 开发环境:VS2010 + .NET Framework + VB.NET 使用文件:pci_8158.vb motion_8158_2D. ...

  10. 关于html水平垂直居中的一些总结吧

    html水平垂直居中 最近遇到很多居中的问题,就花点时间总结了一下放在这里,以后找也方便,0.0~~ 1.居中文本 <div class="wrap"> 我在中间…… ...