前言
最近爲了方便開發,經常需要查看數據庫,但是每次都將db文件導出過程太繁瑣,於是便有了這篇文章,但是需要注意的是,我們需要手機的超級用戶權限才能查看本地數據庫,這裏也是一個坑,大家可以自行搜索相關資料。有了超級用戶權限後,我們就可以開始下面的操作了。
進入手機數據庫
首先,使用adb命令進入到手機系統當中,進入系統後執行su
命令,若此時手機root了在命令窗口就會出現#
號表示,擁有手機有用root權限。
MartindeMacBook-Pro:qmoorassistant martin$ adb shell
vince:/ # su
vince:/ #
獲取root權限後,進入到我們數據庫存在的目錄,一般的規則是/data/data/[app packageName]/database
下,使用ls查看文件,命令展示:
vince:/data/data/com.martin.database/databases # ls
test.db test.db-journal
其中後綴名爲journal的文件是日誌文件,我們不用管。直接使用sqlite命令去查看數據庫,命令展示:
sqlite3 test.db
Enter ".help" for usage hints.
sqlite> .help
.auth ON|OFF Show authorizer callbacks
.backup ?DB? FILE Backup DB (default "main") to FILE
.bail on|off Stop after hitting an error. Default OFF
.binary on|off Turn binary output on or off. Default OFF
我們使用.help
幫助命令,會有很多系統命令,這裏我只介紹一些我平常開發中使用的。
sqlite命令的使用
首先進入數據庫中,肯定需要查看數據庫中的表,命令展示:
sqlite> .table
android_metadata table_schema wxaccount wxmediafile
其中wxaccount
和wxmediafile
是我在項目中創建的表。平時我們在創建表的時候,肯定都給字段定義類型,這裏我們可以通過命令查看。
查看錶結構
命令:pragma table_info(TABLE_NAME)
sqlite> pragma table_info(wxaccount) ;
0|id|integer|0||1
1|lastmsgid|text|0||0
2|wxuin|text|0||0
顯示很容易看,這裏就不多解釋了。這裏的顯示格式若不習慣的,sqlite也提供了顯示格式命令。
sqlite> .mode line
sqlite> pragma table_info(wxaccount);
cid = 0
name = id
type = integer
notnull = 0
dflt_value =
pk = 1
....
cid = 1
name = test1
type = text
notnull = 0
dflt_value =
pk = 0
這裏就會清楚很多,寫到這裏,我想大家應該很清楚如何進入本地數據庫了,下面是我使用sql查看數據的操作,都比較簡單,若不敢興趣可以自行略過。
使用sql命令CURD
sqlite3支持基本的sql命令,sql命令不熟悉的可以去查看這個鏈接SQL 教程。
查詢
- 命令
SELECT column_name,column_name
FROM table_name;
- 用例
sqlite> select * from wxaccount;
id = 1
lastmsgid =
lastoriginalmsgid =
lastthumbmsgid =
wxpassword =
wxuin =
test1 =
模糊查詢
- 語法
SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern;
- 查詢以
.amr
和mp4
結尾的數據
select * from wxmediafile where thumbimgossid like '%.amr';
select * from wxmediafile where bigimgossid like '%.mp4';
插入
INSERT INTO table_name (column1,column2,column3,...) VALUES (value1,value2,value3,...);
- 只插入type=3的數據
INSERT INTO wxmediafile (type) VALUES (3);
修改
- 語法
UPDATE table_name
SET column1=value1,column2=value2,...
WHERE some_column=some_value;
- 修改wxmediafile的
thumbimgossid
update wxaccount set lastmsgid='' where wxuin='1713258295';
循環修改
- 語法
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...);
- 循環修改
1.首先查詢表中以MP3結尾的數據
2.通過id,循環修改thumbimgossid
爲空
update wxmediafile set thumbimgossid='' where id IN (select id from wxmediafile where thumbimgossid like '%.mp3');
刪除
- delete from [table_name];
delete from wxmediafile
聚合函數
count
-- 查詢所有記錄的條數
select count(*) from access_log;
-- 查詢websites 表中 alexa列中不爲空的記錄的條數
select count(alexa) from websites;
-- 查詢websites表中 country列中不重複的記錄條數
select count(distinct country) from websites;
查詢數據庫中 bigimgossid不爲null並且originalFileUploadFlag=0的所有條數;
select count(*) from wxmediafile where bigimgossid IS NOT NULL AND originalFileUploadFlag=0;
查詢數據庫中 bigimgossid不爲null並且originalFileUploadFlag=0的所有條數;
select count(*) from wxmediafile where thumbimgossid IS NOT NULL AND thumbfileuploadflag=0;