什麼是Android SQLite
SQLite是一個關係型資料庫管理系統,這個庫是在用戶空間運行的,因此,不像MySQL等需要在程序中安裝對應的服務來進行通訊。SQLite雖然是個很小巧的資料庫,但是在Android平台上面,使用得卻是異常廣泛。因為SQLite的輕便性能特別適合在移動設備上面承載一些小型的數據管理,並且它的設計很符合Android系統的設計。
Android SQLite的應用場景
針對儲存半結構化或非結構化數據,如配置文件、用戶數據、環境變數等信息。
非常適用於本地APP運行數據的存儲。如果需要將數據共享,可以使用SQL、Web API等技術。
Android SQLite基礎操作
創建SQLiteOpenHelper類
SQLiteOpenHelper類是Android提供的一個幫助類,它提供了一個獲取資料庫實例的方法,並且它可以讓我們很方便的打開數據連接。創建SQLiteOpenHelper 類,我們需要繼承它並且實現其抽象方法,如下:
public class MyDatabaseHelper extends SQLiteOpenHelper { private static final String DB_NAME = "test.db"; // 資料庫名稱 private static final int DB_VERSION = 1; // 資料庫版本號 public MyDatabaseHelper(Context context) { super(context, DB_NAME, null, DB_VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE TABLE IF NOT EXISTS t_user (_id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, age INTEGER DEFAULT 0);"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS t_user;"); onCreate(db); } }
在上述代碼中,我們創建了一個繼承自SQLiteOpenHelper的自定義幫助類MyDatabaseHelper,實現了其兩個方法onCreate和onUpgrade,其中,onCreate方法會在首次創建資料庫時被調用,用於在資料庫中創建相關的表和列。onUpgrade方法會在當前資料庫版本較低時,被SQLiteOpenHelper調用。
打開或創建資料庫
通過繼承自SQLiteOpenHelper並實現部分方法,我們可以打開或創建資料庫,並進行相應的操作,如下:
MyDatabaseHelper dbHelper = new MyDatabaseHelper(context); SQLiteDatabase db = dbHelper.getWritableDatabase();
在上述代碼中,我們創建一個MyDatabaseHelper實例,並調用其getWritableDatabase方法,獲取可寫的資料庫連接(如若只讀請改用getReadableDatabase)。如果資料庫不存在就會自動創建,否則直接打開該資料庫,並返回一個SQLiteDatabase實例。
插入數據
SQLite提供了insert()方法可以插入數據,當然,在插入數據之前我們還需要創建對應的表和列。
SQLiteDatabase db = dbHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("name", "張三"); values.put("age", "25"); db.insert("t_user", null , values);
在上述代碼中,我們首先獲取到一個SQLiteDatabase對象,然後創建ContentValues對象,將要插入的數據封裝進去。最後,我們調用insert方法把數據插入到表t_user中。
查詢數據
SQLite提供了query()方法來查詢數據,該方法有多個重載方法來滿足不同的查詢需求。在這裡我們看下最常用的兩種查詢方式:
查詢所有數據:
SQLiteDatabase db = dbHelper.getWritableDatabase(); Cursor cursor = db.query("t_user", null, null, null, null, null, null); if (cursor.moveToFirst()) { do { String name = cursor.getString(cursor.getColumnIndex("name")); int age= cursor.getInt(cursor.getColumnIndex("age")); Log.d(TAG, "name: " + name + ", age: " + age); } while (cursor.moveToNext()); } cursor.close();
在上述代碼中,我們調用了query()方法來查詢t_user表中所有的數據,並使用Cursor對象遍歷結果,從每行中提取所有數據的name和age欄位。查詢完成後,需要記得調用close()方法來關閉Cursor對象。
按條件查詢數據:
SQLiteDatabase db = dbHelper.getWritableDatabase(); Cursor cursor = db.query("t_user", null, "age>?", new String[]{"18"}, null, null, null); if (cursor.moveToFirst()) { do { String name = cursor.getString(cursor.getColumnIndex("name")); int age= cursor.getInt(cursor.getColumnIndex("age")); Log.d(TAG, "name: " + name + ", age: " + age); } while (cursor.moveToNext()); } cursor.close();
在上述代碼中,我們傳遞了參數來獲取符合指定條件的行。query()方法的第3個參數為where子句,而第4個參數是where子句的每個參數的值。在這裡,我們只返回age欄位大於18的所有人的姓名和年齡。
修改數據
SQLite provides update()方法來更新數據。在更新記錄之前,我們需要先找到將要更新的記錄。在這裡我們看下最常用的兩種更新方式:
更新一個欄位:
SQLiteDatabase db = dbHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("name", "李四"); db.update("t_user", values, "_id=?", new String[]{"1"});
在上述代碼中,我們修改id為1的行中的name欄位,並將它的值設為「李四」。
更新多個欄位:
SQLiteDatabase db = dbHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("name", "王五"); values.put("age", "30"); db.update("t_user", values, "_id=?", new String[]{"1"});
在上述代碼中,我們修改id為1的行中的name和age欄位,分別賦值為「王五」和「30」。
刪除數據
SQLite提供了delete()方法來刪除數據,該方法的第一個參數是表名,第二個參數是where子句,第三個參數是where子句的每個參數的值。在這裡我們看下最常用的方式:
SQLiteDatabase db = dbHelper.getWritableDatabase(); db.delete("t_user", "age<?", new String[]{"18"});
在上述代碼中,我們刪除t_user表中age小於18的所有行。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/232521.html