1.不需要一個單獨的服務器進程或操作的系統(無服務器的)。
2.SQLite 不需要配置,這意味著不需要安裝或管理。
3.一個完整的 SQLite 數據庫是存儲在一個單一的跨平臺的磁盤文件。
4.SQLite 是非常小的,是輕量級的,完全配置時小于 400KiB,省略可選功能配置時小于250KiB。
5.SQLite 是自給自足的,這意味著不需要任何外部的依賴。
6.SQLite 事務是完全兼容 ACID 的,允許從多個進程或線程安全訪問。
7.SQLite 支持 SQL92(SQL2)標準的大多數查詢語言的功能。
8.SQLite 使用 ANSI-C 編寫的,并提供了簡單和易于使用的 API。
9.SQLite 可在 UNIX(Linux, Mac OS-X, Android, iOS)和 Windows(Win32, WinCE, WinRT)中運行。
2.什么是SQLite
SQLite是一個進程內的庫,實現了自給自足的、無服務器的、零配置的、事務性的 SQL 數據庫引擎。它是一個零配置的數據庫,這意味著與其他數據庫一樣,您不需要在系統中配置。就像其他數據庫,SQLite 引擎不是一個獨立的進程,可以按應用程序需求進行靜態或動態連接。SQLite 直接訪問其存儲文件。
3.如何創建數據庫和數據表
1.SQLiteOpenHelper幫助類,借助這個類就可以非常簡單地對數據庫進行創建和升級。 SQLiteOpenHelper 是一個抽象類
2.SQLiteOpenHelper 中有兩個抽象方法,分別是onCreate()和 onUpgrade(),我們必須在自己的幫助類里面重寫這兩個方法,然后分別在這兩個方法中去實現創建、升級數據庫的邏輯
3.SQLiteOpenHelper中還有兩個非常重要的實例方法, getReadableDatabase()和getWritableDatabase()這兩個方法都可以創建或打開一個現有的數據庫(如果數據庫已存在則直接打開,否則創建一個新的數據庫),并返回一個可對數據庫進行讀寫操作的對象。不同的是,當數據庫不可寫入的時候(如磁盤空間已滿)getReadableDatabase()方法返回的對象將以只讀的方式去打開數據庫,而getWritableDatabase()方法則將出現異常。
1、新建一個MySQLite繼承SQLiteOpenHelper
public class MySQLite extends SQLiteOpenHelper {
//數據庫的名字
public static String DB_NAME="MySQLite.db";
// 構造方法源碼
// public MySQLite(Context context, String name數據庫名,SQLiteDatabase.CursorFactory factory標的工廠, int version版本) {
// super(context, name, factory, version);
// }
//已經在父類里面加入了數據庫名字,這里方法里可以省略
public MySQLite(Context context, int version) {
super(context, DB_NAME, null, version);
//創建數據庫
}
//數據庫第一次創建時被調用
@Override
public void onCreate(SQLiteDatabase db) {
//創建表的代碼,添加id主鍵
db.execSQL("create table 表名 (_id integer primary key autoincrement)");
}
//軟件版本號發生改變的時候調用
@Override//舊版本oldVersion,新版本newVersion
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//增加內容之后,比如添加了一個列或一個表之后,需要把版本號更新就會執行這個方法
}
}
2、調用構造方法創建數據庫實例
MySQLite sqlhelper=new MySQLite(this, 1);
3.SQLiteDatabase實現增、刪、改(更新)、查
調用 SQLiteOpenHelper的getReadableDatabase()或getWritableDatabase()
這兩個方法還都會返回一個SQLiteDatabase對象,借助這個對象就可以對數據進行 CRUD 操作了
添加數據
MySQLite sqlhelper=new MySQLite(this, 1);
SQLiteDatabase sd = sqlhelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("列名",值)
sd.insert(表名, null, values);
*SQLiteDatabase 中提供了一個 insert()方法,添加數據。
insert(String table, String nullColumnHack, ContentValues values)
它接收三個參數,
第一個參數是表名,我們希望向哪張表里添加數據,這里就傳入該表的名字。
第二個參數用于在未指定添加數據的情況下給某些可為空的列自動賦值,不用直接傳入 null 即可。
第三個參數是一個 ContentValues 對象,它提供了一系列的 put()方法重載,用于向 ContentValues 中添加數據,*
刪除數據
比如刪除id大于10的數據
sd.delete(表名, "_id>?", new String[]{"10"});
*SQLiteDatabase 中提供了一個 delete()方法,刪除數據
delete(String table, String whereClause, String[] whereArgs)
這個方法接收三個參數,
第一個參數是表名,第二、第三個參數又是用于去約束刪除某一行或某幾行的數據,不指定的話默認就是刪除所有行*
修改(更新)數據
*SQLiteDatabase 中也 update()方法用于對數據進行更新 update(String table,ContentValues values, String whereClause, String[] whereArgs)
將要更新的數據添加到ContentValues里,在通過約束修改更新數據*
查詢數據
*SQLiteDatabase 中提供了一個 query()方法用于對數據進行查詢
query(String table,查詢的表名
String[] columns,查詢的列名
String selection, 指定 where 的約束條件
String[] selectionArgs,為 where 中的占位符提供具體的值
String groupBy, 指定需要 group by 的列
String having,對 group by 后的結果進一步約束
String orderBy)指定查詢結果的排序方式
不需要的直接填null*
直接使用SQL執行增刪改查
MySQLite sqlhelper=new MySQLite(this, 1);
SQLiteDatabase sd = sqlhelper.getWritableDatabase();
//添加
sd.execSQL("insert into 表名 values(?,?)",new String[]{"",""})
//刪除
sd.execSQL("delete from 表名 where _id=?",new String[]{""})
//修改(更新)
sd.execSQL("update 表名 set 列更改表達式? where 條件?,new String[]{"",""})
//查詢
sd.rawQuery("select 列名 from 表名", null);
*SQLiteDatabase下的execSQL( )方法和rawQuery( )方法
execSQL(String sql, Object[] bindArgs)
rawQuery(String sql,String[] selectionArgs)*
|