SQLite介绍

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

SQLite由以下几个组件组成:SQL编译器、内核、后端以及附件。SQLite通过利用虚拟机和虚拟数据库引擎(VDBE),使调试、修改和扩展SQLite的内核变得更加方便。

SQLite支持的数据类型参考链接:http://blog.csdn.net/wzy_1988/article/details/36005947

Android在运行时(run-time)集成了SQLite,所以每个Android应用程序都可以使用SQLite数据库。对于熟悉SQL的开发人员来说,在Android开发中使用SQLite相当简单。但是,由于JDBC会消耗太多的系统资源,所以JDBC对于手机这种内存受限设备来说并不合适。因此,Android提供了一些新的API来使用SQLite数据库。

数据库存储在/data/data/项目包名/databases/ 目录下。

Android开发中使用SQLite数据库

Activity可以使用Content Provider或者 Service访问一个数据库。

创建数据库

Android不自动提供数据库。在Android应用程序中使用SQLite,必须自己创建数据库,然后创建表、索引、填充数据。Android提供了一个SQLiteOpenHelper帮助你创建一个数据库,你只要继承 SQLiteOpenHelper 类,就可以轻松的创建数据库。SQLiteOpenHelper 类根据开发应用程序的需要,封装了创建和更新数据库使用的逻辑。SQLiteOpenHelper 的子类,至少需要实现三个方法:

构造函数,调用父类SQLiteOpenHelper的构造函数。这个方法需要四个参数:上下文环境,数据库名字,一个可选的游标工厂(通常是NULL),一个代表你正在使用的数据库模型版本的整数。

onCreate()方法,它需要一个SQLiteDatabase对象作为参数,根据需要对这个对象填充表和初始化数据。

onUpgrade()方法,它需要三个参数,一个SQLiteDatabase对象,一个旧的版本号和一个新的版本号,这样你就可以清楚如何把一个数据库从旧的模型转变为新的模型。

下面代码展示了如何继承SQLiteOpenHelper创建数据库:

import android.content.Context;

import android.database.sqlite.SQLiteDatabase;

import android.database.sqlite.SQLiteOpenHelper;

public class MyDBHelper extends SQLiteOpenHelper {

private static final String COLUMN_ID = "_id";

public static final String TABLE_NAME = "category";

private static final String DATABASE_NAME = "category.db";

private static final int DATABASE_VERSION = 1;

private static final String DATABASE_CREATE = "CREATE TABLE IF NOT EXISTS " + TABLE_NAME + "(" + COLUMN_ID

+ " INTEGER PRIMARY KEY AUTOINCREMENT, " + " fid TEXT, token TEXT, cid TEXT, cname TEXT)";

public CategoryDBHelper(Context context) {

super(context, DATABASE_NAME, null, DATABASE_VERSION);

}

@Override

public void onCreate(SQLiteDatabase db) {

db.execSQL(DATABASE_CREATE);

}

@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

db.execSQL("DROP TABLE IF EXISTS" + TABLE_NAME);

onCreate(db);

}

}

增删改查数据库

因为SQLite支持标准的SQL语句,因此我们可以用标准SQL语句才增删改查数据库,推荐使用占位符的sql语句,看起来更加清爽,下面是我的代码示例:

public class CategoryDBManager {

private MyDBHelper myDBHelper;

private static CategoryDBManager categoryDBManager = null;

private CategoryDBManager(Context context) {

myDBHelper = new MyDBHelper(context);

}

/**

* 单例模式

*/

public static CategoryDBManager getInstance(Context context) {

if (categoryDBManager == null) {

synchronized (CategoryDBManager.class) {

if (categoryDBManager == null) {

categoryDBManager = new CategoryDBManager(context);

}

}

}

return categoryDBManager;

}

public SQLiteDatabase getDB() {

SQLiteDatabase db = myDBHelper.getWritableDatabase();

while (db.isDbLockedByCurrentThread()) {

}

return db;

}

public void insertLists(String token, String fid, List lists) {

// 打开可写数据库

SQLiteDatabase db = getDB();

for (PlateCategoryData pd : lists) {

// 执行SQL语句,替换占位符

db.execSQL("insert into " + MyDBHelper.TABLE_NAME + "(cid, cname, fid, token) values(?, ?, ?, ?)",

new Object[] { pd.getId(), pd.getName(), fid, token });

}

// 释放资源

db.close();

}

public ArrayList getLists(String fid, String token) {

ArrayList datas = new ArrayList();

SQLiteDatabase db = getDB();

// 执行原始查询,得到cursor

String querySql = "select cid, cname from " + MyDBHelper.TABLE_NAME + " where fid = ? and token = ?";

Cursor cursor = db.rawQuery(querySql, new String[] { fid, token });

// 移动cursor到第一个数据(无数据返回false)

if (cursor.moveToFirst()) {

// while判断是否有下一条数据

do {

PlateCategoryData pd = new PlateCategoryData(cursor.getString(cursor.getColumnIndex("cid")),

cursor.getString(cursor.getColumnIndex("cname")));

datas.add(pd);

} while (cursor.moveToNext());

}

cursor.close();

db.close();

return datas;

}

public void updateLists(String fid, String token, ArrayList datas) {

SQLiteDatabase db = getDB();

for (PlateCategoryData pd : datas) {

String sql = "update " + MyDBHelper.TABLE_NAME

+ " set cid = ?, cname = ? where fid = ? and token = ?";

db.execSQL(sql, new Object[] { pd.getId(), pd.getName(), fid, token });

}

db.close();

}

public void deleteLists(String fid, String token) {

SQLiteDatabase db = getDB();

db.execSQL("delete from " + MyDBHelper.TABLE_NAME + " where fid = ? and token = ?", new Object[] { fid,

token });

db.close();

}

public void closeDB() {

SQLiteDatabase db = getDB();

if (db.isOpen()) {

myDBHelper.close();

db.close();

}

}

}

参考链接

[1] http://www.ibm.com/developerworks/cn/opensource/os-cn-sqlite/

原文:http://blog.csdn.net/wzy_1988/article/details/36189245

android sqlite 示例,Android SQLite数据库操作示例相关推荐

  1. php读取excel中数据库,ThinkPHP 框架实现的读取excel导入数据库操作示例

    本文实例讲述了ThinkPHP 框架实现的读取excel导入数据库操作.分享给大家供大家参考,具体如下: 入口文件中: require_once VENDOR_PATH.'PHPExcel/PHPEx ...

  2. python爬虫开发数据库设计入门经典_Python3实现的爬虫爬取数据并存入mysql数据库操作示例...

    本文实例讲述了Python3实现的爬虫爬取数据并存入mysql数据库操作.分享给大家供大家参考,具体如下: 爬一个电脑客户端的订单.罗总推荐,抓包工具用的是HttpAnalyzerStdV7,与chr ...

  3. python mss_Python实现的连接mssql数据库操作示例

    本文实例讲述了python实现的连接mssql数据库操作.分享给大家供大家参考,具体如下: 1. 目标数据sql2008 r2 comprject=>testmodel 2. 安装python ...

  4. python从oracle提取数据库_Python编程实战之Oracle数据库操作示例

    本文实例讲述了Python编程实战之Oracle数据库操作.分享给大家供大家参考,具体如下: 1. 要想使Python可以操作Oracle数据库,首先需要安装cx_Oracle包,可以通过下面的地址来 ...

  5. yaf mysql_Yaf框架封装的MySQL数据库操作示例

    本文实例讲述了Yaf框架封装的MySQL数据库操作.分享给大家供大家参考,具体如下: Yaf封装DB简单操作 介绍 因为Yaf是一个纯天然的MVC阔架,本人还在贝锐的时候就和主管一起用Yaf框架去重构 ...

  6. python mssql数据库开发_Python实现的连接mssql数据库操作示例

    本文实例讲述了python实现的连接mssql数据库操作.分享给大家供大家参考,具体如下: 1. 目标数据sql2008 r2 comprject=>testmodel 2. 安装python ...

  7. android gpio驱动实例,安卓gpio操作示例

    GPIO值在RK3288中的计算方法为:bank×32+pin,如: GPIO7A3: 7×32 + 0*8 +3=227 GPIO0B5: 0×32+ 1*8 +5=13 1. 导出 /sys/cl ...

  8. python读取redis存储数据的存储时间_Python读写Redis数据库操作示例

    使用Python如何操作Redis呢?下面用实例来说明用Python读写Redis数据库. 比如,我们插入一条数据,如下: import redis class Database: def __ini ...

  9. pythonredis实例_Python读写Redis数据库操作示例

    使用Python如何操作Redis呢?下面用实例来说明用Python读写Redis数据库. 比如,我们插入一条数据,如下: import redis class Database: def __ini ...

  10. python爬取新闻并归数据库_Python爬取数据并写入MySQL数据库操作示例

    Python爬取数据并写入MySQL数据库的实例 首先我们来爬取 http://html-color-codes.info/color-names/ 的一些数据. 按 F12 或 ctrl+u 审查元 ...

最新文章

  1. 数据结构和算法之——跳表
  2. php中函数的定义格式,在php中函数定义的格式
  3. VTK:Utilities之ViewportBorders
  4. 多线程在javaweb中的应用
  5. 上汽乘用车-大数据岗位面试(失败经历)
  6. CMake编译opencv
  7. python methodtype_Python的实例定属性和方法或类绑定方法
  8. 乐高机器人教室布置图片大全_圣诞节手抄报内容简单图片漂亮
  9. 搭建NFS使多个服务器中的web项目共享图片资源
  10. 计算机注销命令,Win7使用DOS命令实现定时自动关机,注销、重启的方法
  11. js中call()方法和apply方法的使用
  12. 1. InteliJ IDEA 下 的SpringBoot
  13. Java学习,继承关系的学习和理解
  14. 【ACL2019】知识图谱的全方位总结
  15. arcgis伪节点检查_ArcGis拓扑错误检查及修改
  16. 在线工具(eda/画图[visio替代]/公式编辑/公式识别)
  17. DB2的VALUE函数
  18. Kubernetes 二进制安装详细步骤
  19. 一战封神——提升奇珍提高战力
  20. 过压保护电路(OVP)

热门文章

  1. Hadoop大数据解决方案
  2. 华硕ezflash3找不到u盘_通过华硕BIOS Tools - EZ Flash 2 更新主板BIOS
  3. 使用 Blastp 和 Hmmer 筛选出包含特定结构域的蛋白
  4. oracle怎么绑定vue,Oracle AutoVue 安装与配置教程,oracleautovue
  5. C#加密和解密PDF文件
  6. 好用的 Puppeteer 辅助工具 Puppeteer Recorder
  7. spark 和 elk 技术栈对比?
  8. eggs和egg是什么意思_egg是什么
  9. AD18 SCH Filter面板——智能查找功能
  10. 复化梯形公式matlab程序,复化梯形公式,辛普森公式的matlab程序