簡介
SQLite 是一個軟件庫,實現(xiàn)了自給自足的、無服務(wù)器的恤批、零配置的、事務(wù)性的 SQL 數(shù)據(jù)庫引擎裹赴。SQLite 是在世界上最廣泛部署的 SQL 數(shù)據(jù)庫引擎喜庞。SQLite 源代碼不受版權(quán)限制诀浪。
數(shù)據(jù)類型
SQLite使用動態(tài)類型。內(nèi)容可以存儲為INTEGER延都,REAL雷猪,TEXT,BLOB或NULL晰房。
創(chuàng)建數(shù)據(jù)庫
在實際開發(fā)中求摇,我們需要追尋一下步驟
- 確認(rèn)目標(biāo)數(shù)據(jù)庫是否已經(jīng)存在
- 如果不存在,首先創(chuàng)建數(shù)據(jù)庫嫉你,然后創(chuàng)建數(shù)據(jù)庫表以及必需的初始化數(shù)據(jù)
- 如果存在月帝,打開并確認(rèn)識是否是最新版本
- 如果是舊版本,就運行相關(guān)代碼升級到最新版本
Android專門提供了一個SQLiteOpenHelper
幫助類幽污,該類有需要實現(xiàn)兩個方法onCreate()
和onUpgrade()
,實現(xiàn)數(shù)據(jù)庫的創(chuàng)建和升級的邏輯
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
對象用于執(zhí)行不同的數(shù)據(jù)庫邏輯
- 添加數(shù)據(jù)
添加數(shù)據(jù)需要使用ContentValues
對象對數(shù)據(jù)進行封裝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);
- 刪除數(shù)據(jù)
SQLiteDatabase
提供了一個delete()
方法:
int delete(String table, String whereClause, String[] whereArgs){}
whereClause為約束條件嚷辅,whereArgs為約束條件對應(yīng)的值MyDatabases myDatabases = new MyDatabases(this,"data.db",null,1); SQLiteDatabase sqLiteDatabase = myDatabases.getReadableDatabase(); sqLiteDatabase.delete("book","id = ?",new String[]{"1"});
- 修改數(shù)據(jù)
修改數(shù)據(jù)提供了一個update()
方法:
update(String table, ContentValues values, String whereClause, String[] whereArgs) {}
values為更新的數(shù)據(jù),whereClause為約束條件距误,whereArgs為約束條件對應(yīng)的值ContentValues contentValues = new ContentValues(); contentValues.put("name","java"); sqLiteDatabase.update("book",contentValues,"id = ?",new String[]{"1"});
- 查詢
重載了多個query(),最復(fù)雜的如下
public Cursor query(boolean distinct, String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit, CancellationSignal cancellationSignal) {}
參數(shù) | 詳解 |
---|---|
distinct | 設(shè)置為true簸搞,每一行的數(shù)據(jù)必須唯一,否則flase |
table | 表名 |
columns | 需要查詢的字段准潭,null為全部查詢 |
selection | where約束條件 |
selectionArgs | 為where約束條件提供具體的值 |
groupBy | 指定需要group by的列 |
having | 對group by后的結(jié)果進行約束 |
orderBy | 對查詢結(jié)果進行排序 |
limit | 用于設(shè)置查詢行數(shù) |
cancellationSignal | 取消操作的信號趁俊,一般用于設(shè)置查詢?nèi)∠麜r的后續(xù)操作 |
Cursor cursor = sqLiteDatabase.query("book",null,null,null,null,null,null);
List<Book> books = new ArrayList<>();
if(cursor.moveToFirst()){
Book book;
do{
//遍歷Cursor對象,取出數(shù)據(jù)并打印
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");