SQLite是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite是一个增长最快的数据库引擎,这是在普及方面的增长,与它的尺寸大小无关。SQLite 源代码不受版权限制。
SQLite是什么
SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库,这意味着与其他数据库一样,您不需要在系统中配置。
就像其他数据库,SQLite 引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接。SQLite 直接访问其存储文件。
SQLite 是非常小的,是轻量级的,完全配置时小于 400KiB,省略可选功能配置时小于250KiB(但它竟然可以支持高达2TB大小的数据库)
与许多其它数据库管理系统不同,SQLite不是一个客户端/服务器结构的数据库引擎,而是被集成在用户程序中。
SQLite采用动态数据类型,当某个值插入到数据库时,SQLite将会检查它的类型,如果该类型与关联的列不匹配,SQLite则会尝试将该值转换成该列的类型,如果不能转换,则该值将作为本身的类型存储,SQLite称这为“弱类型”。但有一个特例,如果是INTEGER PRIMARY KEY,则其他类型不会被转换,会报一个“datatype missmatch”的错误。
所以,还是尽量按规定的类型来存
在Android中主要涉及的就是SQLiteDatabase和SQLiteOpenHelper这两个类
SQLiteDatabase
这个类提供了一些管理SQLite数据库的方法,比如创建、删除、执行SQL命令,和执行其他常见的数据库管理任务的方法。所以说这个类是比较核心的
常用的方法有:
db.execSQL(String sql) //执行任何的SQL语句
db.insert(String table,String nullColumnHack,ContentValues values) //插入记录
db.delete(String table,String whereClause,String[] whereArgs)//删除记录
db.update(String table,ContentValues values,String whereClause,String[] whereArgs)//更新记录
db.query(String table,String[] columns,String selection,String[] selectionArgs,String groupBy,String having,String orderBy)//查询记录
db.rawQuery(String sql,String[] selectionArgs)//通过sql语句查询记录
然后看一段在Activity具体使用的代码:
1 | public class MainActivity extends AppCompatActivity { |
db 查询方法得到的 cursor 是指向第一条记录之前的
因此查询得到 cursor 后第一次调用 moveToFirst(实际要向后移一个位置)或 moveToNext(从指向第一条记录之前向后移动一个位置变为刚好指向第一条记录位置)都可以将 cursor 移动到第一条记录上。
SQLiteOpenHelper
这个类为SQLiteDatabase的帮助类,主要用于管理数据库的创建与版本更新。SQLiteHelper是一个抽象类,一般通过创建一个继承自它的子类并重写onCreat()
和onUpgrade()
这两个回调方法进行使用。
onCreat(SQLiteDatabase db)
首次创建数据库时调用,一般用于建表等操作。当检测到数据库已经存在后就不再执行了,只能用升级的方法更新onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion)
当升级数据库版本时调用
1 | public class SQLiteHelper extends SQLiteOpenHelper { |
有时候还会用到一个回调函数:onOpen,就是数据库打开的时候会回调
创建好了辅助类就可以在Activity中进行使用了
1 | public class MainActivity2 extends AppCompatActivity { |
更多内容待补充…
关于事务
写数据库的时候也许会用到事务,SQLite是支持事务操作的,很简单的几句代码
1 | // 事务开始 |
评论框加载失败,无法访问 Disqus
你可能需要魔法上网~~