简介
SQLite 是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是在世界上最广泛部署的 SQL 数据库引擎。SQLite 源代码不受版权限制。
数据类型
SQLite使用动态类型。内容可以存储为INTEGER,REAL,TEXT,BLOB或NULL。
创建数据库
在实际开发中,我们需要追寻一下步骤
- 确认目标数据库是否已经存在
- 如果不存在,首先创建数据库,然后创建数据库表以及必需的初始化数据
- 如果存在,打开并确认识是否是最新版本
- 如果是旧版本,就运行相关代码升级到最新版本
Android专门提供了一个SQLiteOpenHelper
帮助类,该类有需要实现两个方法onCreate()
和onUpgrade()
,实现数据库的创建和升级的逻辑
public class MyDatabases extends SQLiteOpenHelper {
private final String CREATE_TABLE = "create table book( id varchar(20) primary key,name varchar(20),price REAL)";
public MyDatabases(Context context,String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
增删改查
SQLiteOpenHelper
有两个非常重要的的实例化方法getWritableDatabase()
和getReadableDatabase()
都返回一个SQLiteDatabase
对象用于执行不同的数据库逻辑
- 添加数据
添加数据需要使用ContentValues
对象对数据进行封装MyDatabases myDatabases = new MyDatabases(this,"data.db",null,1); SQLiteDatabase sqLiteDatabase = myDatabases.getReadableDatabase(); ContentValues contentValues = new ContentValues(); contentValues.put("id","1"); contentValues.put("name","thinking in java"); contentValues.put("price","132.11"); sqLiteDatabase.insert("book",null,contentValues);
- 删除数据
SQLiteDatabase
提供了一个delete()
方法:
int delete(String table, String whereClause, String[] whereArgs){}
whereClause为约束条件,whereArgs为约束条件对应的值MyDatabases myDatabases = new MyDatabases(this,"data.db",null,1); SQLiteDatabase sqLiteDatabase = myDatabases.getReadableDatabase(); sqLiteDatabase.delete("book","id = ?",new String[]{"1"});
- 修改数据
修改数据提供了一个update()
方法:
update(String table, ContentValues values, String whereClause, String[] whereArgs) {}
values为更新的数据,whereClause为约束条件,whereArgs为约束条件对应的值ContentValues contentValues = new ContentValues(); contentValues.put("name","java"); sqLiteDatabase.update("book",contentValues,"id = ?",new String[]{"1"});
- 查询
重载了多个query(),最复杂的如下
public Cursor query(boolean distinct, String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit, CancellationSignal cancellationSignal) {}
参数 | 详解 |
---|---|
distinct | 设置为true,每一行的数据必须唯一,否则flase |
table | 表名 |
columns | 需要查询的字段,null为全部查询 |
selection | where约束条件 |
selectionArgs | 为where约束条件提供具体的值 |
groupBy | 指定需要group by的列 |
having | 对group by后的结果进行约束 |
orderBy | 对查询结果进行排序 |
limit | 用于设置查询行数 |
cancellationSignal | 取消操作的信号,一般用于设置查询取消时的后续操作 |
Cursor cursor = sqLiteDatabase.query("book",null,null,null,null,null,null);
List<Book> books = new ArrayList<>();
if(cursor.moveToFirst()){
Book book;
do{
//遍历Cursor对象,取出数据并打印
book = new Book(cursor.getString(cursor.getColumnIndex("id")), cursor.getString(cursor.getColumnIndex("name")),
cursor.getDouble(cursor.getColumnIndex("price")));
books.add(book);
}while(cursor.moveToNext());
}
Log.d("data", books+"s");