安卓中的SQLite
阿新 • • 發佈:2019-02-11
SQLite資料庫是一個輕量級資料庫,支援標準的SQL語法,ACID事物,安卓提供了SQLiteDatabase來操作和管理資料庫。
SQLiteDatabase常用方法
- 例項獲取的部分方法:
//開啟path路徑對應的資料庫
public static SQLiteDatabase openDatabase(@NonNull String path, @Nullable CursorFactory factory, @DatabaseOpenFlags int flags)
// 開啟File對應的資料庫 如果資料庫不存在則建立一個新的資料庫。
public static SQLiteDatabase openOrCreateDatabase(@NonNull File file,@Nullable CursorFactory factory)
//開啟path路徑對應的資料庫 如果資料庫不存在則建立一個新的資料庫。
public static SQLiteDatabase openOrCreateDatabase(@NonNull String path, @Nullable CursorFactory factory)
- 例項方法,資料表和事物
execSQL(String sql,Object[] bindArgs)//執行帶佔位符的SQL語句
execSQL(String sql)//執行SQL語句
insert(String table,String nullColumnHack,ContentValues Values)//向指定的表中插入資料
Update(String table,ContentValues Values,String whereClause,String[] whereArgs)//更新表中指定資料
delete(String table ,String whereClause,String[] whereArgs)//刪除表中特定資料
Cursor query(String table, String[] columns, String selection,
String[] selectionArgs, String groupBy, String having,
String orderBy, String limit) //對指定表進行查詢 返回一個遊標物件。
Cursor query(boolean distinct, String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit) //按條件查詢 第一個為消元屬性,去重複行的。
Cursor rawQuery(String sql, String[] selectionArgs) //執行帶佔位符的SQL語句
beginTransaction();//開始事物
endTransaction()//結束事物
從上面的方法中看出,SQL執行語句有兩種方式,一種是直接用execSQL()方法由我們給出完整的資料庫執行語句,另一種是用insert(),update(),delete()和query()插敘方法由我們給出規則值進行操作。
- 建立表
//指定建立表的語句
String sql="create table tablename (name varchar(255),age integer)
//由sqLiteDatabase來執行語句
sqLiteDatabase.execSQL(sql);
- insert 插入值
//直接執行SQL語句
sqLiteDatabase.execSQL("insert into tablename(列1,列2) values(值1,值2) ");
sqLiteDatabase.execSQL("insert into tablename(?,?)", new String[]{值1,值2});
//特定方法執行 表名:table 強行插入null值的資料的列的名稱:nullColumnHack 需要插入的內容:Values ContentValues是以hashMap儲存資料列名為鍵 列值為值的map
insert(String table,String nullColumnHack,ContentValues Values)
//比如:
ContentValues values=new ContentValues();
values.put("name","豬八戒");
values.put("age",9999);
sqLiteDatabase.insert("表名",null,values);//返回插入行的行id,-1表示插入失敗。
- update 更新操作
//表名:table 新的資料values 執行語句的篩選條件:whereClause 執行條件的引數值:whereArgs
Update(String table,ContentValues Values,String whereClause,String[] whereArgs)
ContentValues values=new ContentValues();
values.put("name","老人家");
sqLiteDatabase.insert("表名",values,"age>?",new String[]{"50"});//把年領大於50的人的名字都改成老人家。
- query()查詢方法
//是否去重複行 表名 需要查詢的列名 返回的行的過濾器 佔位符 group by語句 having語句 order by語句 limit 返回的行數
Cursor query(boolean distinct, String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit) //按條件查詢 第一個為消元屬性,去重複行的。
- 事物
sqLiteDatabase.beginTransaction();
try{
//要執行的DML語句
//如果語句執行成功 要設定執行成功 否則就會事物回滾
sqLiteDatabase.setTransactionSuccessful();
}finally {
sqLiteDatabase.endTransaction();
}
Cursor
Cursor類似於JDBC中的ResultSet,用來管理SQL語句返回結果集的類。
-主要方法
move(int )//在結果集上下移動,int負上 正下
boolean moveToFirst()//移動到第一行,當然也有移動到下一行,上一行,指定行,最後一行,成功就返回true
getType(int columnIndex)//Type是獲取的型別 int是列的下標 從0開始
String[] getColumnNames();//獲取列的名稱
int getColumnCount();//有多少列
String getColumnName(int columnIndex);//第多少列的名稱
但是作為安卓開發的我們哪有那麼6的資料庫技術,一般都是用封裝好的框架來執行資料庫操作的。比如安卓自帶的SQLiteOpenHelper類或者開源庫LitePal。工具一直在更新任重而道遠啊。。
MARK(18)
大道廢有仁義;慧智出有大偽;六親不和有孝慈;國家昏亂有忠臣。