1. 程式人生 > >安卓中的SQLite

安卓中的SQLite

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)//更新表中指定資料 deleteString 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)

大道廢有仁義;慧智出有大偽;六親不和有孝慈;國家昏亂有忠臣。