Android的SQLite使用介绍
一、SQLite的简介
Android当中内置SQLite数据库,那个SQLite有什么特点呢?
SQLite 是一个开源的嵌入式关系数据库,实现自包容、零配置、支持事务的SQL数据库引擎。 其特点是高度便携、使用方便、结构紧凑、高效、可靠。 与其他数据库管理系统不同,SQLite 的安装和运行非常简单,在大多数情况下 - 只要确保SQLite的二进制文件存在即可开始创建、连接和使用数据库。在于个人使用SQLite的体验中,SQLite最大的优点就是高度便携,在一些小型单机应用做数据存储是十分有优势的。经过总结SQLite特点有以下几方面:
1.轻量级
使用 SQLite 只需要带一个动态库,就可以享受它的全部功能,而且那个动态库的尺寸想当小。
2.独立性
SQLite 数据库的核心引擎不需要依赖第三方软件,也不需要所谓的“安装”。
3.隔离性
SQLite 数据库中所有的信息(比如表、视图、触发器等)都包含在一个文件夹内,方便管理和维护。
4.跨平台
SQLite 目前支持大部分操作系统,不至电脑操作系统更在众多的手机系统也是能够运行,比如:Android。
5.多语言接口
SQLite 数据库支持多语言编程接口。
6.安全性
SQLite 数据库通过数据库级上的独占性和共享锁来实现独立事务处理。这意味着多个进程可以在同一时间从同一数据库读取数据,但只能有一个可以写入数据。
二、Android 中的SQLite相关类
1、SQLiteDatabase
SQLiteDatabase表示一个数据库,可以通过增加,删除,修改,查询等相关的sql命令进行操作,同时也支持通用的一部分sql指令。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)
//执行一个SQL语句,可以是一个select或其他的sql语句
(void) execSQL(String sql)
//关闭数据库
(void) close()
//查询指定的数据表返回一个带游标的数据集
(Cursor) query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)
//运行一个预置的SQL语句,返回带游标的数据集(与上面的语句最大的区别就是防止SQL注入)
(Cursor) rawQuery(String sql, String[] selectionArgs)
2、SQLiteOpenHelper
SQLiteOpenHelper是SQLiteDatabase的一个帮助类,用来管理数据库的创建和版本的更新。一般是建立一个类继承它,并实现它的onCreate和onUpgrade方法。
//构造方法,一般是传递一个要创建的数据库名称那么参数
SQLiteOpenHelper(Context context,String name,SQLiteDatabase.CursorFactory factory,int version)
//创建数据库时调用
onCreate(SQLiteDatabase db)
//版本更新时调用
onUpgrade(SQLiteDatabase db,int oldVersion , int newVersion)
//创建或打开一个只读数据库
getReadableDatabase()
//创建或打开一个读写数据库
getWritableDatabase()
三、Android中SQLite的相关操作
1、SQLiteOpenHelper的打开和SQLiteDatabase的创建
当创建SQLiteOpenHelper的时候,构造函数需要提供,上下文,数据库名称,版本号等基本信息。
/** 静态Helper类,用于建立、更新和打开数据库*/ private static class DBOpenHelper extends SQLiteOpenHelper { public DBOpenHelper(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); } private static final String DB_CREATE = "create table " + DB_TABLE + " (" + KEY_ID + " integer primary key autoincrement, " + KEY_NAME+ " text not null, " + KEY_VOLUME+ " integer," + KEY_WEIGHT + " float);"; @Override public void onCreate(SQLiteDatabase _db) { _db.execSQL(DB_CREATE); } @Override public void onUpgrade(SQLiteDatabase _db, int _oldVersion, int _newVersion) { _db.execSQL("DROP TABLE IF EXISTS " + DB_TABLE); onCreate(_db); } }
/** Open the database */ public void open() throws SQLiteException { dbOpenHelper = new DBOpenHelper(context, DB_NAME, null, DB_VERSION); try { db = dbOpenHelper.getWritableDatabase(); } catch (SQLiteException ex) { db = dbOpenHelper.getReadableDatabase(); } }
2、SQLiteOpenHelper的关闭
/** Close the database */ public void close() { if (db != null){ db.close(); db = null; } }
3、往数据库中添加数据
/** * 添加数据 * */ public long insert(Storage storage) { ContentValues newValues = new ContentValues(); newValues.put(KEY_NAME, storage.Name); newValues.put(KEY_VOLUME, storage.Volume); newValues.put(KEY_WEIGHT, storage.Weight); return db.insert(DB_TABLE, null, newValues); }
4、查询数据中数据
通过一下代码,我们可以看出
(Cursor) query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)
这个方法的groupBy参数也是一个条件语句
/** * 查询所有数据 * */ public Storage[] queryAllData() { Cursor results = db.query(DB_TABLE, new String[] { KEY_ID, KEY_NAME, KEY_VOLUME, KEY_WEIGHT}, null, null, null, null, null); return ConvertToStorage(results); }
/** * 查询单个数据 * */ public Storage[] queryOneData(long id) { Cursor results = db.query(DB_TABLE, new String[] { KEY_ID, KEY_NAME, KEY_VOLUME, KEY_WEIGHT}, KEY_ID + "=" + id, null, null, null, null); return ConvertToStorage(results); }
5、删除数据库数据
/** * 清除所有数据 * */ public long deleteAllData() { return db.delete(DB_TABLE, null, null); }
/** * 清除单个数据 * */ public long deleteOneData(long id) { return db.delete(DB_TABLE, KEY_ID + "=" + id, null); }
6、数据更新
/** * 更新单个数据 * */ public long updateOneData(long id , Storage people){ ContentValues updateValues = new ContentValues(); updateValues.put(KEY_NAME, people.Name); updateValues.put(KEY_VOLUME, people.Volume); updateValues.put(KEY_WEIGHT, people.Weight); return db.update(DB_TABLE, updateValues, KEY_ID + "=" + id, null); }
Demo下载地址:http://download.csdn.net/detail/stop_pig/7884569