安卓SQLiteDatabase資料庫的使用
阿新 • • 發佈:2018-12-18
1.建立MyDBOpenHelper繼承自SQLiteOpenHelper用來管理資料庫
public class MyDBOpenHelper extends SQLiteOpenHelper { public MyDBOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory,int version){ super(context,name,null,version); } //資料庫第一次建立時被呼叫 //在資料庫第一次建立時,新增已知需要建立的固定表格 @Override public void onCreate(SQLiteDatabase sqLiteDatabase) { sqLiteDatabase.execSQL("CREATE TABLE persons(id INTEGER PRIMARY KEY AUTOINCREMENT,name VARCHAR,money REAL,ratio REAL)"); sqLiteDatabase.execSQL("CREATE TABLE record(id INTEGER PRIMARY KEY AUTOINCREMENT,time VARCHAR,money REAL,profit REAL,deduct REAL)"); } //軟體版本號發生改變時呼叫 @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { } }
2.建立SQLManager資料庫管理類,設定為單利
public class SQLManager { private MyDBOpenHelper dbOpenHelper; public MyDBOpenHelper getDbOpenHelper() { return dbOpenHelper; } public void setDbOpenHelper(MyDBOpenHelper dbOpenHelper) { this.dbOpenHelper = dbOpenHelper; } // 內部類實現單利模式 // 延遲載入,減少記憶體開銷 private static class SQLManagerHolder{ private static SQLManager instance = new SQLManager(); } // 私有的建構函式 private SQLManager(){ } public static SQLManager getInstance(){ return SQLManagerHolder.instance; } }
3.首次使用時建立資料庫
private void initDataBase() {
SQLManager sqlManager = SQLManager.getInstance();
MyDBOpenHelper myDBOpenHelper = new MyDBOpenHelper(context,"my.db",null,1);
sqlManager.setDbOpenHelper(myDBOpenHelper);
}
4.進行增刪改查資料庫時從單利中獲取
private void deletePerson() { SQLManager sqlManager = SQLManager.getInstance(); MyDBOpenHelper dbOpenHelper = sqlManager.getDbOpenHelper(); SQLiteDatabase database = dbOpenHelper.getWritableDatabase(); database.execSQL("DELETE FROM persons WHERE id = ?",new String[]{mainModel.getId()}); finish(); }
獲取到SQLiteDatabase後,使用該物件執行對應的SQL語句。
5.建立表格
//資料庫第一次建立時被呼叫
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
sqLiteDatabase.execSQL("CREATE TABLE persons(id INTEGER PRIMARY KEY AUTOINCREMENT,name VARCHAR,money REAL,ratio REAL)");
sqLiteDatabase.execSQL("CREATE TABLE record(id INTEGER PRIMARY KEY AUTOINCREMENT,time VARCHAR,money REAL,profit REAL,deduct REAL)");
}
對於已知需要使用的表格在MyDBOpenHelper的onCreate的方法中進行建立。
以第一個persons表為例:
建立表名為persons的表,表中欄位id為自動增長主鍵 int型使用INTEGER表示,name 字串型使用VARCHAR表示,money 浮點型使用REAL表示。
6.往表格中新增資料
database.execSQL("INSERT INTO persons (name,money,ratio)values(?,?,?)", new Object[]{mainModel.getName(),mainModel.getMoney(),mainModel.getRatio()});
對應的欄位型別相對應。(database獲取辦法在第四步)
7.刪除表格中的某條資料
database.execSQL("DELETE FROM persons WHERE id = ?",new String[]{mainModel.getId()});
表示根據id從persons表格中刪除資料。
8.修改表格中的某條資料
database.execSQL("UPDATE persons SET name = ?,money = ? WHERE id = ?",new Object[]{mainModel.getName(),mainModel.getMoney(),mainModel.getId()});
修改persons表中id為當前獲取mainModel的id的資料,重新設定name和money兩個欄位。
9.查詢表格中資料
查詢某一表格中所有資料
List<MainModel> mainModels = new LinkedList<>();
SQLiteDatabase database = myDBOpenHelper.getReadableDatabase();
Cursor cursor = database.rawQuery("SELECT * FROM persons",null);
//存在資料返回true
while (cursor.moveToNext()){
MainModel model = new MainModel();
int id = cursor.getInt(cursor.getColumnIndex("id"));
model.setId(String.valueOf(id));
String name = cursor.getString(cursor.getColumnIndex("name"));
model.setName(name);
String money = cursor.getString(cursor.getColumnIndex("money"));
model.setMoney(Float.valueOf(money));
mainModels.add(model);
}
根據條件查詢資料
Cursor cursor1 = database.rawQuery("SELECT * FROM persons WHERE id = ?", new String[]{"1"});
//存在資料返回true
float sum = 0.f;
while (cursor1.moveToFirst()){
MainModel model = new MainModel();
int id = cursor1.getInt(cursor1.getColumnIndex("id"));
model.setId(String.valueOf(id));
String name = cursor1.getString(cursor1.getColumnIndex("name"));
model.setName(name);
}
因為主鍵是唯一的,所以查詢的資料只有一條。