在手機中把與本身聯繫好幾年的好友的聊天記錄不當心刪除了,痛苦萬分,好在對方的手機裏還有一份完整的聊天記錄,想把對方的聊天記錄轉移到本身的手機中來,如下是具體的補救方法。html
使用軟件:SQLite Expert、iToolssql
適用手機:iPhone數據庫
假設A手機是誤操做刪除記錄的手機,B手機是完整數據源手機。微信
1.備份ide
首先,先把B手機的數據備份好,建議使用iTools(如今已更新到3.0,本文截圖依然是1.0的),找到微信App中的文檔文件夾Documents,整個複製到本地硬盤保存起來吧。工具
2.計算MD5值spa
首先要弄清楚雙方微信ID用戶名的MD5值,這個很重要,在後面操做過程當中極易弄混淆。在Documents中,會有若干個MD5哈希值爲名稱的文件夾,若是該手機只登陸過一個微信賬號,就會只有一個MD5哈希值的文件夾;若是有多個,你不知道哪一個纔是你經常使用微信賬號文件夾的話,告訴你一個辦法,哪一個文件夾佔用空間大,哪一個就是你經常使用的。那麼,這個文件夾名稱就是A手機微信ID哈希值,如下簡稱「A_HASH」。code
依次打開其內部文件夾,找到聊天記錄核心文件:MM.sqlite,很明顯,是個sqlite數據庫文件。視頻
使用數據庫軟件打開,這裏推薦使用SQLite Expert,我的版是免費的。在左側樹狀圖中找到好友數據表「Friend」,其中,UsrName字段就是每一個好友的微信ID用戶名,NickName字段就是好友的暱稱,能夠經過暱稱找到B手機的微信ID用戶名,而後使用MD5計算工具算出它的MD5值,如下簡稱「B_HASH」。sqlite
3.複製聊天記錄
首先把A手機的數據庫文件複製到本地,即「/Documents/A_HASH/DB/MM.sqlite」,使用SQLite Expert打開,在左側樹狀圖中找到想恢復的好友的數據表「Chat_B_HASH」,這裏有兩個狀況,分開討論:
(1)若是是剛剛在A手機中誤刪除的,且沒有與B發生事後續通訊,該表則不存在,點擊SQLite Expert的SQL標籤頁,輸入SQL語句建立該表:
SQL語句以下(記得改成正確的「B_HASH」):
CREATE TABLE [Chat_B_HASH] (TableVer INT4, MesLocalID INTEGER PRIMARY KEY, MesSvrID INTEGER, CreateTime INTEGER, Message TEXT, Status INTEGER, ImgStatus INTEGER, Type INTEGER, Des INTEGER);
按F5,若是沒報錯的話,則該數據表建立成功。
(2)若是在A手機中誤刪除以後,與B產生了新的通訊,則該數據表已存在,且存有刪除後的通訊數據。因爲一會要把B手機密切好友的全部聊天記錄複製到A手機中,此時A手機與B好友的聊天數據已沒有意義,爲了不出現數據重複與其它未知的錯誤出現,建議將A手機中與B好友的數據刪除。刪除方法是在左側樹狀圖中點擊B好友的數據表「Chat_B_HASH」(千萬別點錯),在SQL標籤頁中輸入SQL語句並執行:
delete from Chat_B_HASH
同時,還要使用iTools在iPhone中刪除與B好友聊天記錄相關的語音、圖片、視頻等文件(不放心的話能夠先把這些數據備份出來),在iTools中找到這3個文件夾,在文件列表中按「CTRL + A」全選,按「Del」刪除。
/Documents/A_HASH/Audio/B_HASH /Documents/A_HASH/Img/B_HASH /Documents/A_HASH/Video/B_HASH
接下來就是重頭戲了,要把B手機中與A聊天的記錄複製到A的數據庫文件MM.sqlite中。首先找到並使用SQLite Expert打開第1步中B手機的數據庫文件「\Documents\B_HASH\DB\MM.sqlite」,在左側樹狀圖中找到A的微信數據表「Chat_A_HASH」,點擊,在右側選擇「Data」標籤頁,點擊表中數據任意記錄,按「CTRL + A」全選(數據量很大的話須要等幾秒纔有反應),再按「CTRL + C」複製,而後在左側樹狀圖中選擇A手機的數據庫,找到剛纔3.(1)步建立或3.(2)步刪除數據的數據表「Chat_B_HASH」,在右側「Data」標籤頁下的數據記錄位置中點擊一下,按「CTRL + V」粘貼(數據量很大的話也要等幾秒纔有反應),完成數據的複製。爲了不將A和B的數據庫弄混淆,複製完後最好把B的數據庫關閉。
4.修改收信與發信的標誌位
因爲在B手機的微信中,看到的聊天記錄中A是在左邊,B是在右邊,A的對話框泡泡是白色,B的是綠色,如今數據直接複製到A的數據庫文件中後,須要將二者的發信收信標誌位交換,才能在A的手機中正確顯示,不然的話會看到本來是A說的話,變成B說的話了。
在SQLite Expert中,點擊剛纔粘貼的數據表「Chat_B_HASH」,點擊右側的「SQL」標籤頁,依次輸入並執行如下SQL語句:
update Chat_B_HASH set des=2 where des==0
update Chat_B_HASH set des=0 where des==1
update Chat_B_HASH set des=1 where des==2
切記!這3條語句要一條接一條地執行!即:輸入第1條,按一次F5,刪掉,再輸入第2條,再按一次F5,再刪掉,而後再輸入第3條,按一次F5,完畢!
5.修改視頻數據的標誌位
這一步若不執行的話,在最後完成後會形成A手機中視頻旁邊出現感嘆號的問題。在SQLite Expert中,點擊剛纔粘貼的數據表「Chat_B_HASH」,點擊右側的「SQL」標籤頁,輸入並執行如下SQL語句:
update Chat_B_HASH set message=replace(cast(message as varchar(80000)) ,'status="0"','status="4"') where type=43 and des=1; update Chat_B_HASH set message=replace(cast(message as varchar(80000)) ,'status="1"','status="4"') where type=43 and des=1; update Chat_B_HASH set message=replace(cast(message as varchar(80000)) ,'status="2"','status="4"') where type=43 and des=1; update Chat_B_HASH set message=replace(cast(message as varchar(80000)) ,'status="3"','status="4"') where type=43 and des=1; update Chat_B_HASH set message=replace(cast(message as varchar(80000)) ,'status="0"','status="3"') where type=43 and des=0; update Chat_B_HASH set message=replace(cast(message as varchar(80000)) ,'status="1"','status="3"') where type=43 and des=0; update Chat_B_HASH set message=replace(cast(message as varchar(80000)) ,'status="2"','status="3"') where type=43 and des=0; update Chat_B_HASH set message=replace(cast(message as varchar(80000)) ,'status="4"','status="3"') where type=43 and des=0;
若最後完成後仍發現視頻旁邊有感嘆號出現,請使用終極方法:拿另外一臺iPhone C,經過WIFI聊天記錄遷移的方式遷移到C手機,再遷移回A手機。在遷移過程當中會自動修復。
另外,若是B手機的聊天記錄是從Android版本的微信遷移過來的,須要執行如下SQL語句,緣由是老版的Android微信將視頻格式的標誌位存儲爲「44」,須要改爲「43」:
update Chat_B_HASH set type=43 where type=44 update Chat_B_HASH set message=replace(cast(message as varchar(80000)) ,'type="44"','type="43"') where type=43
6.複製數據到A手機
進行以上數據庫修改操做以後,關閉SQLite Expert(不然複製回iPhone會出錯),將修改好的MM.sqlite文件使用iTools導入回A手機微信APP的相應文件夾,即:「/Documents/A_HASH/DB/MM.sqlite」
而後是將B手機中與A聊天的語音、圖片、視頻導入到A手機微信APP的相應文件夾中,假設在第1步中從B手機備份出來的Documents文件夾存放在D盤,使用iTools將這三個文件夾中的全部文件拖入A手機的微信APP對應的文件夾中:
D:\Documents\B_HASH\Audio\A_HASH ---> iTools:/Documents/A_HASH/Audio/B_HASH (文件後綴是:*.aud 等等) D:\Documents\B_HASH\Img\A_HASH ---> iTools:/Documents/A_HASH/Img/B_HASH (文件後綴是:*.pic 與 *.pic_thum 等等)
D:\Documents\B_HASH\Video\A_HASH ---> iTools:/Documents/A_HASH/Video/B_HASH (文件後綴是:*.mp4 與 *.video_thum 等等)
結語:
在本文的這些操做中,難點就是將A與B弄混淆,所以,在進行此項工做之前,對A與B手機的備份顯得尤其重要,一旦弄錯,還能夠重頭再來。