/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();
}