SQLite简介
Google为Andriod的较大的数据处理提供了SQLite,他在数据存储、管理、维护等各方面都相当出色,功能也非常的强大。SQLite具备下列特点:
- 轻量级
使用 SQLite 只需要带一个动态库,就可以享受它的全部功能,而且那个动态库的尺寸想当小。 - 独立性
SQLite 数据库的核心引擎不需要依赖第三方软件,也不需要所谓的“安装”。 - 隔离性
SQLite 数据库中所有的信息(比如表、视图、触发器等)都包含在一个文件夹内,方便管理和维护。 - 跨平台
SQLite 目前支持大部分操作系统,不至电脑操作系统更在众多的手机系统也是能够运行,比如:Android。 - 多语言接口
SQLite 数据库支持多语言编程接口。 - 安全性
SQLite 数据库通过数据库级上的独占性和共享锁来实现独立事务处理。这意味着多个进程可以在同一时间从同一数据库读取数据,但只能有一个可以写入数据。
创建数据库
首先我们要了解SQLiteHelper这个类,它是Android专门提供的一个SQLite的帮助类。下面简单的介绍一下这个类。
首先,我们要知道SQLiteHelper是一个抽象类,在使用它之前必须要实现它的抽象方法。也就是onCreate()和onUpgrade()方法。
onCreate():
当数据库存在时,不会执行onCreate()方法
onUpgrade():
当数据库版本大于上一版本时,该方法才会执行
SQLiteHelper中还有两个非常重要的实例方法:getReadableDatabases()和getWriteableDatabases()。这两个方法都可以打开一个现有的数据库(如果数据库存在则直接打开,如果不存在则创建一个新的数据库),并返回一个可对数据库操作的对象。不同的是当数据库不可写入时,getReadableDatabases()只能以读的方式打开数据库,而getWriteableDatabases()会报错。
public class SqlTest extends SQLiteOpenHelper {
private Context mContext;
private String sql = "create table user(username varchar(20) not null , password varchar(60) not null );";
public SqlTest(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
mContext = context;
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
添加数据
SQLiteDatabase中提供了一个insert()方法,这个方法就是专门用来添加数据的。它接收三个参数:
第一个参数是表名。第二个参数一般传入null。第三个参数是一个ContentValues对象,它提供一系列的put()方法重载,向ContentValues中添加数据。实例如下:
SQLiteTest sqLiteTest = new SQLiteTest(this, "test", null, 1);
SQLiteDatabase db = sqLiteTest.getReadableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put("name","zhangsan");
db.insert("table1",null,contentValues);
更新数据
SQLiteTest sqLiteTest = new SQLiteTest(this, "test", null, 1);
SQLiteDatabase db = sqLiteTest.getReadableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put("name","zhangsan");
db.update("table1",contentValues,"name=?",new String[]{"lisi"});
删除数据
SQLiteTest sqLiteTest = new SQLiteTest(this, "test", null, 1);
SQLiteDatabase db = sqLiteTest.getReadableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put("name","zhangsan");
db.delete("table1","name=zhangsan",new String[]{"lisi"});
查询数据
query方法参数 | 对应SQL 部分 | 描述 |
---|---|---|
table | from table name | 指定查询的表名 |
columns | select column1, column2 | 指定查询的列名 |
selection | where column = value | 指定where的约束条件 |
selectionArgs | - | 为where中的占位符提供具体的值 |
group by | group by column | 指定需要group by 的列 |
having | having column = value | 对group by 后的结果进一步的约束 |
orderBy | order by column1,column2 | 指定结果的查询方式 |