數據存儲之SQLite(1)

/DATA/data/包名/databases是該程序存放數據的目錄,DATA是Environment.getDataDirectory() 方法返回的路徑。找到數據庫之后可以選中user.db 執行導出。
用真機調試,data目錄如果打不開,說明你的手機沒有root,改用模擬器就OK了。


1.獲取SQLiteDatabase對象:

SQLiteDatabase db = openOrCreateDatabase(File file, SQLiteDatabase.Cursor, Factory factor);

2.SQLiteDatabase提供了如下方法:

db.execSQL(sql)          //執行任何SQL語句
db.insert(table, nullColumnHack, value)      //(增)
db.delete(table, whereClause, whereArgs)   //(刪)
db.updata(table, values, whereClause, whereArgs)  //(改)
db.query(table,columns,whereClause,whereArgs,groupBy,having,orderBy)  //(查)
db.rawQuery(sql, selectionArgs)   //可以使用SQL語句直接查詢

3.執行query和rawQuery操作,返回一個Cursor游標對象,它可以遍歷整個查詢處的內容,Cursor提供了如下方法來移動游標:

c.move( int offset)   //游標向上或向下移動指定行數,正數向下,負數向上
c.moveToFirst()       //移動到第一行,返回布爾值
c.moveToLast()
c.moveToNext()
c.moveToPostion(int postion)    //移動到指定行,返回布爾值
c.moveToPrevious()    //移動到上一行
c.isFirst();             //是否指向第一條  
c.isLast();             //是否指向最后一條  
c.isBeforeFirst();   //是否指向第一條之前  
c.isAfterLast();     //是否指向最后一條之后  
c.isNull(int columnIndex);  //指定列是否為空(列基數為0)  
c.isClosed();         //游標是否已關閉  
c.getCount();       //總數據項數  
c.getPosition();    //返回當前游標所指向的行數  
c.getColumnIndex(String columnName); //返回某列名對應的列索引值  
c.getString(int columnIndex);                 //返回當前行指定列的值  

下面是一個創建一個SQLiteDatabase對象,只用SQL語句進行查詢的實例

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //每個程序都有自己的數據庫,而且互不干擾
    //創建一個數據庫,并且打開,這個方法返回的是一個SQLiteDadabase對象(如果沒有就創建,有就直接打開)
    //這個數據庫的名字叫user.db,這樣取名是為了以后導出到電腦上后方便第三方軟件打開,第二個參數是一個常量,此例表示私有別的數據庫無法訪問
    SQLiteDatabase db = openOrCreateDatabase("user.db", MODE_PRIVATE, null);
    //創建一張表 usertb ,主鍵名字建議寫成_id, 1個主鍵,3列, 加上_id總共4列
      db.execSQL("create table if not exists usertb(_id integer primary key autoincrement, name text not null, age integer not null, sex text not null)");
    //往這張表usertb中加3條數據,分別3列,3個對應的值
      db.execSQL("insert into usertb(name, age, sex) values('Jack','18','男')");
      db.execSQL("insert into usertb(name, age, sex) values('Hellen','19','女')");
      db.execSQL("insert into usertb(name, age, sex) values('Mike','20','男')");
    
    //查詢數據,第一個參數還是一條語句,查詢方法,指定如何查找查詢條件, 第二個參數是查詢條件,默認把數據全部查詢出來
    //這里的返回值是Cursor,是查詢數據后得到的管理集合的一個類,可以理解為list(游標接口)
    Cursor c = db.rawQuery("select * from usertb", null);
      if (c!= null){                                        //如果能查詢到數據
         c.moveToFirst();                               //如果沒有處理過數據,這條可以省略,默認光標第一行
         while(c.moveToNext()){                 //每次只能查詢到一條數據,判斷是否能查詢到下一行(重點:每次光標到達一行后,下面的語句依次打印那一行中的數據,再循環,打印下面一行數據)
             Log.i ("info",  " "+ c.getInt(c.getColumnIndex("_id")));           //第一個字段int型, 需要轉成String型才能用Log打?。ㄕ业竭@一條數據中字段角標為0的integer型數據)
             Log.i("info", c.getString(c.getColumnIndex("name")));          //第二個字段是text型
             Log.i("info", " "+c.getInt(c.getColumnIndex("age")));
             Log.i("info", c.getString(c.getColumnIndex("sex")));
             Log.i("info", "~~~~~~~~");                                                 //測試一次循環有多少數據被打印
         }
         c.close();                                                                 //查詢完,游標一定要釋放
      }
      db.close();       
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容