android中使用sqlite命令編輯數據庫

前言

最近爲了方便開發,經常需要查看數據庫,但是每次都將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   

其中wxaccountwxmediafile是我在項目中創建的表。平時我們在創建表的時候,肯定都給字段定義類型,這裏我們可以通過命令查看。

查看錶結構

命令: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;
  • 查詢以.amrmp4結尾的數據
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;

參考鏈接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章