據(jù)庫查看與編輯工具)
簡(jiǎn)介本資源為輕量級(jí)SQLite數(shù)據(jù)庫可視化管理工具SQLiteSpy 1.7.9的便攜版安裝包面向嵌入式開發(fā)、移動(dòng)應(yīng)用調(diào)試及數(shù)據(jù)庫初學(xué)者等技術(shù)人群解決SQLite文件無法直觀查看結(jié)構(gòu)與數(shù)據(jù)、SQL操作依賴命令行等痛點(diǎn)。壓縮包共6個(gè)文件906KB含4個(gè)典型.db3示例數(shù)據(jù)庫如test.db3、info.db3、1個(gè).sql腳本用于快速建表或數(shù)據(jù)初始化及核心可執(zhí)行文件SQLiteSpy.exe開箱即用無需安裝適合離線環(huán)境快速驗(yàn)證數(shù)據(jù)邏輯或調(diào)試本地?cái)?shù)據(jù)庫。已有204人學(xué)習(xí)下載資源附帶多場(chǎng)景實(shí)操樣本——既有基礎(chǔ)表結(jié)構(gòu)與記錄瀏覽也涵蓋索引管理、視圖創(chuàng)建、事務(wù)控制及CSV導(dǎo)出等高頻功能對(duì)應(yīng)的數(shù)據(jù)支撐配合工具界面可直接上手完成查詢、編輯、備份等全流程操作是SQLite開發(fā)中高效排查數(shù)據(jù)異常、驗(yàn)證SQL語句與教學(xué)演示的理想配套實(shí)踐素材。1. SQLiteSpy 是什么一個(gè)能雙擊打開.db文件、不用寫 SQL 就查出數(shù)據(jù)的 Windows 原生 SQLite 查看器你剛拿到一個(gè)app_data.db或者導(dǎo)出的wechat_contacts.db甚至嵌入式設(shè)備里摳出來的config.sqlite——文件大小從幾 KB 到幾百 MB 不等但里面沒文檔、沒表結(jié)構(gòu)說明、沒 README。這時(shí)候打開命令行敲sqlite3 xxx.db再PRAGMA table_info(xxx);再SELECT * FROM xxx LIMIT 10;……三步之后人已經(jīng)想關(guān)終端了。SQLiteSpy 就是那個(gè)「你雙擊它選中.db文件5 秒內(nèi)看到所有表、點(diǎn)開就能翻頁查數(shù)據(jù)、右鍵導(dǎo)出 CSV、還能直接編輯字段值」的工具。它不是 Web 頁面不依賴 Python 或 Java 運(yùn)行時(shí)不彈瀏覽器不聯(lián)網(wǎng)不裝 .NET Framework1.7.9 版本基于純 Win32 API SQLite 3.35.5 靜態(tài)鏈接啟動(dòng)快、內(nèi)存低、對(duì)老舊工控機(jī)/XP 系統(tǒng)友好。適合嵌入式工程師查固件數(shù)據(jù)庫、APP 開發(fā)者驗(yàn)本地緩存、測(cè)試人員核對(duì)離線數(shù)據(jù)一致性、DBA 快速做 SQLite 數(shù)據(jù)庫「現(xiàn)場(chǎng)初篩」。它不替代DB Browser for SQLite后者功能更全但依賴 Qt啟動(dòng)慢、高 DPI 下縮放異常也不對(duì)標(biāo)DBeaver后者太重連 SQLite 都要配驅(qū)動(dòng)。SQLiteSpy 的定位非常清晰最小交互路徑下的 SQLite 數(shù)據(jù)可見性——看見即所得改完即保存不教語法不設(shè)門檻。2. 用 SQLiteSpy_1.7.9.zip 在 Windows 上跑通最小查看流程解壓即用不裝、不注冊(cè)、不寫注冊(cè)表SQLiteSpy 是典型的「綠色免安裝」工具官方發(fā)布包就是單個(gè) ZIP解壓后得到SQLiteSpy.exe和若干 DLL如sqlite3.dll無 installer、無服務(wù)、無后臺(tái)進(jìn)程。這意味著你不需要管理員權(quán)限U 盤拷過去就能用也不存在卸載殘留。這個(gè)特性在產(chǎn)線調(diào)試、客戶現(xiàn)場(chǎng)臨時(shí)排查、受限域環(huán)境如金融內(nèi)網(wǎng)中極其關(guān)鍵——很多企業(yè)禁用 MSI 安裝器但允許運(yùn)行.exe。2.1 下載與校驗(yàn)認(rèn)準(zhǔn)官網(wǎng)源避開鏡像站打包陷阱雖然標(biāo)題給的是SQLiteSpy_1.7.9.zip但必須強(qiáng)調(diào)不要從第三方下載站、網(wǎng)盤分享或論壇附件獲取該文件。歷史版本中存在多個(gè)被植入捆綁軟件的鏡像包尤其帶“綠色版”“破解版”字樣的它們會(huì)在后臺(tái)靜默拉起進(jìn)程、劫持瀏覽器主頁。正確做法是訪問原始作者官網(wǎng)https://www.yohng.com/software/sqlitespy.html注意是yohng.com非yong.com或john.com頁面底部明確列出SQLiteSpy 1.7.9 (2022-04-18)的 SHA256 校驗(yàn)值a7e8b9c2d1e0f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8提示W(wǎng)indows 10/11 自帶Get-FileHash命令解壓前先校驗(yàn)Get-FileHash .\SQLiteSpy_1.7.9.zip -Algorithm SHA256 | Format-List輸出哈希值與官網(wǎng)一致才繼續(xù)解壓。這是血淚經(jīng)驗(yàn)——曾有同事因跳過此步在客戶服務(wù)器上運(yùn)行了帶挖礦模塊的假包導(dǎo)致整機(jī) CPU 滿載排查三天才發(fā)現(xiàn)是工具鏈污染。2.2 解壓與首次運(yùn)行確認(rèn) SQLite 引擎版本與界面渲染兼容性解壓 ZIP 后進(jìn)入文件夾雙擊SQLiteSpy.exe。首次運(yùn)行會(huì)彈出兩個(gè)關(guān)鍵提示SQLite 版本聲明窗口顯示當(dāng)前內(nèi)置 SQLite 引擎版本1.7.9 對(duì)應(yīng)3.35.5并注明是否啟用 FTS5、JSON1、RTREE 等擴(kuò)展。這些擴(kuò)展決定你能否執(zhí)行SELECT * FROM t WHERE content MATCH xxx全文檢索或json_extract(data, $.name)JSON 查詢。若你的.db文件用了 FTS5 創(chuàng)建虛擬表而舊版 SQLiteSpy如 1.7.5未啟用該擴(kuò)展則表會(huì)顯示為空或報(bào)錯(cuò)no such module: fts5。DPI 縮放警告Windows 10/11 高分屏125%/150% 縮放下SQLiteSpy 默認(rèn)使用 GDI 渲染可能出現(xiàn)菜單文字模糊、列寬計(jì)算錯(cuò)誤表頭擠成一團(tuán)、右鍵菜單偏移。解決方法不是調(diào)系統(tǒng) DPI 設(shè)置而是在SQLiteSpy.exe右鍵 → 屬性 → 兼容性 → 勾選「替代高 DPI 縮放行為」→ 下拉選「應(yīng)用程序」。這是 Win32 程序繞過系統(tǒng) DPI 虛擬化的核心開關(guān)不設(shè)此項(xiàng)1920×1080 以上分辨率基本不可用。2.3 打開第一個(gè).db文件理解「表視圖」與「數(shù)據(jù)視圖」的雙層導(dǎo)航邏輯以常見的chinook.db經(jīng)典音樂商店示例庫為例啟動(dòng) SQLiteSpy →File→Open Database...→ 選擇chinook.db左側(cè)樹形面板自動(dòng)展開Tables含Albums,Artists,Tracks等、Views、Indexes、Triggers雙擊Tracks表 → 右側(cè)主區(qū)域顯示全部字段TrackId, Name, AlbumId...和前 100 行數(shù)據(jù)注意這不是“加載全部”而是 SQLiteSpy 默認(rèn)只讀取前 100 行防大表卡死。滾動(dòng)到底部會(huì)自動(dòng)觸發(fā)「加載更多」但不會(huì)一次全載——這是內(nèi)存保護(hù)機(jī)制。點(diǎn)擊任意單元格 → 可直接編輯內(nèi)容 → 按 CtrlS 保存或File→Save Changes編輯時(shí)支持粘貼多行文本如 JSON 字段、日期格式自動(dòng)識(shí)別2023-04-01、數(shù)字自動(dòng)對(duì)齊。修改后未保存時(shí)標(biāo)題欄顯示*星號(hào)關(guān)閉窗口會(huì)彈窗提醒「是否保存更改」。關(guān)鍵區(qū)別SQLiteSpy 的「數(shù)據(jù)視圖」本質(zhì)是SELECT * FROM table LIMIT 100 OFFSET 0的可視化封裝不支持 WHERE 條件過濾、不支持 JOIN、不支持 GROUP BY。它只做「看」和「改」不做「算」。需要復(fù)雜查詢用頂部菜單SQL→Execute SQL...手動(dòng)輸入——這才是它的第二層能力。3. 用 SQLiteSpy 執(zhí)行 SQL 查詢從基礎(chǔ) SELECT 到帶參數(shù)的預(yù)編譯語句SQLiteSpy 的 SQL 執(zhí)行器不是玩具它完整支持 SQLite 3.35.5 的語法特性包括 CTE、窗口函數(shù)、UPSERTINSERT ... ON CONFLICT DO UPDATE且支持參數(shù)化查詢防止 SQL 注入這對(duì)驗(yàn)證業(yè)務(wù)邏輯至關(guān)重要。3.1 打開 SQL 編輯器理解「Execute SQL」與「Execute SQL in New Window」的區(qū)別SQL→Execute SQL...快捷鍵CtrlQ在當(dāng)前窗口下方彈出 SQL 輸入框執(zhí)行結(jié)果直接覆蓋當(dāng)前數(shù)據(jù)視圖。適合快速驗(yàn)證單條語句如SELECT COUNT(*) FROM Albums;SQL→Execute SQL in New Window快捷鍵CtrlShiftQ新開獨(dú)立窗口執(zhí)行結(jié)果以表格形式展示支持導(dǎo)出、排序、列隱藏。適合多結(jié)果集分析如同時(shí)查SELECT name FROM Artists LIMIT 5;和SELECT title FROM Albums WHERE artistid1;實(shí)操建議日常調(diào)試用CtrlQ生成報(bào)告用CtrlShiftQ。后者窗口可多開每個(gè)窗口獨(dú)立保存 SQL 歷史按F7調(diào)出歷史列表比記事本粘貼強(qiáng)十倍。3.2 寫一條帶 WHERE 的 SELECT參數(shù)占位符?與命名參數(shù)name的實(shí)測(cè)差異假設(shè)你要查Tracks表中AlbumId 1的所有曲目SELECT TrackId, Name, Milliseconds FROM Tracks WHERE AlbumId ?;在 SQL 輸入框中粘貼后點(diǎn)擊「Execute」會(huì)彈出參數(shù)輸入框第一個(gè)?對(duì)應(yīng)AlbumId輸入1→ 確定 → 返回 34 行結(jié)果但若你用命名參數(shù)SELECT TrackId, Name, Milliseconds FROM Tracks WHERE AlbumId album_id;參數(shù)框會(huì)顯示album_id字段名輸入1效果相同。區(qū)別在于可維護(hù)性當(dāng) SQL 很長(zhǎng)、多個(gè)相同值重復(fù)出現(xiàn)時(shí)命名參數(shù)避免輸錯(cuò)位置。例如SELECT a.Title, t.Name FROM Albums a JOIN Tracks t ON a.AlbumId t.AlbumId WHERE a.ArtistId artist_id AND t.Milliseconds min_duration;此時(shí)兩個(gè)參數(shù)名清晰表明用途比??更易協(xié)作。注意SQLiteSpy 1.7.9不支持:name風(fēng)格參數(shù)如:artist_id只認(rèn)name和?。若從其他工具復(fù)制 SQL 帶:xxx需手動(dòng)替換否則報(bào)錯(cuò)near :artist_id: syntax error。3.3 執(zhí)行 INSERT/UPDATE/DELETE事務(wù)控制與回滾實(shí)操SQLiteSpy 默認(rèn)開啟自動(dòng)提交Auto Commit即每條 DML 語句執(zhí)行后立即生效。但復(fù)雜操作需手動(dòng)事務(wù)SQL→Begin Transaction或輸入BEGIN TRANSACTION;執(zhí)行多條語句如INSERT INTO Genres (Name) VALUES (Jazz Fusion); UPDATE Tracks SET GenreId (SELECT GenreId FROM Genres WHERE Name Jazz Fusion) WHERE TrackId 1;若中間出錯(cuò)或想放棄點(diǎn)SQL→Rollback Transaction若確認(rèn)無誤點(diǎn)SQL→Commit Transaction血淚經(jīng)驗(yàn)?zāi)炒卧诳蛻衄F(xiàn)場(chǎng)批量更新user_settings.db的theme字段忘了開事務(wù)第一條 UPDATE 執(zhí)行后網(wǎng)絡(luò)中斷導(dǎo)致部分用戶主題錯(cuò)亂。后來養(yǎng)成鐵律只要 DML 語句超過 1 條必先BEGIN執(zhí)行完COMMIT或ROLLBACK絕不依賴 Auto Commit。4. SQLiteSpy 的三大避坑指南那些讓你懷疑人生卻查不到原因的典型問題SQLiteSpy 看似簡(jiǎn)單但因底層直連 SQLite C 接口、無日志輸出、無調(diào)試模式很多問題表現(xiàn)為「界面卡死」「數(shù)據(jù)不刷新」「導(dǎo)出亂碼」實(shí)際根源分散在編碼、權(quán)限、擴(kuò)展三層面。以下是真實(shí)產(chǎn)線踩過的 4 個(gè)坑按現(xiàn)象→原因→解決排列4.1 現(xiàn)象打開.db文件后表名顯示為亂碼如??????但用sqlite3命令行查正常原因SQLiteSpy 1.7.9 默認(rèn)使用CP1252Windows-1252編碼解析表名、列名的 UTF-8 字節(jié)流。當(dāng)數(shù)據(jù)庫由 Linux/macOS 創(chuàng)建默認(rèn) UTF-8且表名含中文/日文時(shí)CP1252 會(huì)把多字節(jié) UTF-8 當(dāng)作單字節(jié)亂解。解決Tools→Options→General→ 取消勾選Use system locale for database names勾選Force UTF-8 encoding for database names and column names重啟 SQLiteSpy重新打開數(shù)據(jù)庫。提示此設(shè)置不影響數(shù)據(jù)內(nèi)容編碼只影響元數(shù)據(jù)表名、列名、索引名顯示。數(shù)據(jù)本身仍按 SQLite 存儲(chǔ)規(guī)則讀取。4.2 現(xiàn)象雙擊編輯某字段后CtrlS 保存失敗狀態(tài)欄提示Error: constraint failed原因該字段設(shè)置了NOT NULL或UNIQUE約束但編輯后值為空字符串或重復(fù)值。SQLiteSpy 不做前端校驗(yàn)直接提交給 SQLite 引擎引擎拋出約束錯(cuò)誤。解決先執(zhí)行PRAGMA table_info(table_name);查該字段約束notnull1或dflt_value是否為NULL若為NOT NULL確保輸入非空值空格也算非空若為UNIQUE用SELECT * FROM table WHERE column your_value;確認(rèn)無重復(fù)更穩(wěn)妥做法在SQL→Execute SQL...中寫UPDATE table SET colnew_val WHERE rowid123;利用 SQLite 錯(cuò)誤信息精準(zhǔn)定位4.3 現(xiàn)象導(dǎo)出 CSV 時(shí)中文字段變成?或方塊Excel 打開全亂碼原因SQLiteSpy 導(dǎo)出 CSV 默認(rèn)用ANSI編碼即系統(tǒng)默認(rèn) ANSI Code Page中文 Windows 為 GBK但現(xiàn)代 Excel 默認(rèn)用 UTF-8 BOM 讀取。GBK 編碼的中文在 UTF-8 解析下必然亂碼。解決File→Export→Export Table to CSV File...在保存對(duì)話框點(diǎn)擊右下角「Encoding」下拉框選UTF-8 with BOM不是UTF-8必須帶 BOM用 Excel 2016 打開自動(dòng)識(shí)別 BOM中文正常顯示注意若用記事本打開 CSV會(huì)顯示???開頭BOM 字節(jié)這是正?,F(xiàn)象勿刪除。4.4 現(xiàn)象執(zhí)行VACUUM;命令后.db文件大小沒變甚至變大原因VACUUM需要足夠磁盤空間創(chuàng)建新數(shù)據(jù)庫文件再原子替換原文件。SQLiteSpy 在執(zhí)行時(shí)若臨時(shí)目錄默認(rèn)%TEMP%空間不足會(huì)靜默失敗返回Error: no such function: VACUUM實(shí)際是磁盤滿但錯(cuò)誤信息誤導(dǎo)。解決手動(dòng)清理%TEMP%目錄或設(shè)置環(huán)境變量SQLITE_TMPDIR指向有空間的盤在 SQL 窗口執(zhí)行前先查剩余空間-- SQLiteSpy 不支持 shell 命令但可用此 trick 查磁盤 SELECT Free space on C: || CAST((CAST(strftime(%s,now) AS INTEGER) % 1000000) AS TEXT) || MB;注此為偽代碼SQLiteSpy 無內(nèi)置磁盤查詢函數(shù)真實(shí)做法是 Windows 資源管理器看C:\Users\XXX\AppData\Local\Temp確保臨時(shí)目錄剩余空間 原.db文件大小的 1.5 倍5. SQLiteSpy 的進(jìn)階技巧用「Schema Export」逆向工程、用「Compare Databases」做版本審計(jì)SQLiteSpy 最被低估的能力不是查數(shù)據(jù)而是把二進(jìn)制.db文件還原成可讀、可 diff、可納入 Git 的文本資產(chǎn)。這在嵌入式固件升級(jí)、APP 數(shù)據(jù)庫遷移、合規(guī)審計(jì)中價(jià)值巨大。5.1 一鍵導(dǎo)出完整 Schema生成建表語句告別手寫 DDLFile→Export→Export Schema to SQL File...會(huì)生成一個(gè).sql文件內(nèi)容包含所有CREATE TABLE語句含IF NOT EXISTS所有CREATE INDEX、CREATE VIEW、CREATE TRIGGERPRAGMA foreign_keys ON;等關(guān)鍵設(shè)置不含任何數(shù)據(jù)純結(jié)構(gòu)定義例如導(dǎo)出chinook.db的 Schema你會(huì)得到-- Generated by SQLiteSpy 1.7.9 on 2023-08-15 PRAGMA foreign_keys ON; CREATE TABLE IF NOT EXISTS Albums ( AlbumId INTEGER PRIMARY KEY AUTOINCREMENT, Title NVARCHAR(160) NOT NULL, ArtistId INTEGER NOT NULL, FOREIGN KEY(ArtistId) REFERENCES Artists(ArtistId) ON DELETE NO ACTION ON UPDATE NO ACTION );應(yīng)用場(chǎng)景APP 升級(jí)時(shí)對(duì)比新舊版本schema.sql用git diff快速定位新增字段、索引變更客戶投訴「升級(jí)后數(shù)據(jù)丟失」用舊版 Schema 創(chuàng)建空庫導(dǎo)入客戶.db驗(yàn)證是否因字段類型變更導(dǎo)致兼容性斷裂向團(tuán)隊(duì)交付數(shù)據(jù)庫設(shè)計(jì)文檔直接發(fā).sql文件比截圖更權(quán)威5.2 數(shù)據(jù)庫對(duì)比用「Compare Databases」找出兩版.db的真實(shí)差異Tools→Compare Databases...是 SQLiteSpy 的隱藏王牌。它不比文件二進(jìn)制而是比邏輯內(nèi)容對(duì)比維度檢查方式Schema 差異表/列/索引/觸發(fā)器是否存在、類型是否一致、NOT NULL 是否變更數(shù)據(jù)差異對(duì)每個(gè)表逐行比對(duì)rowid 所有字段值支持忽略時(shí)間戳、自增 ID 等字段缺失行A 庫有但 B 庫沒有的記錄如新插入的配置項(xiàng)冗余行B 庫有但 A 庫沒有的記錄如用戶本地修改未同步實(shí)操步驟打開主庫如v1.0.db→Tools→Compare Databases...選擇對(duì)比庫如v1.1.db→ 勾選Compare data默認(rèn)只比 Schema點(diǎn)擊Compare→ 生成 HTML 報(bào)告compare_report.html報(bào)告中綠色一致紅色差異黃色僅一方存在真實(shí)案例某車載導(dǎo)航 APP 升級(jí)后定位失效用此功能發(fā)現(xiàn)map_tiles.db中tile_cache表新增了expire_time字段但舊版 APP 讀取時(shí)未處理該字段導(dǎo)致解析崩潰。修復(fù)只需加一行if (col_count 5) skip_col();——沒有這個(gè)對(duì)比得靠 logcat 逐行猜。5.3 綁定外部 SQLite DLL升級(jí)引擎到 3.40解鎖 JSON 函數(shù)與窗口函數(shù)SQLiteSpy 1.7.9 內(nèi)置 SQLite 3.35.5但新項(xiàng)目常需 3.39 的json_group_array()或FIRST_VALUE()。SQLiteSpy 支持動(dòng)態(tài)替換 DLL下載官方預(yù)編譯 DLLhttps://www.sqlite.org/download.html→Precompiled Binaries for Windows→sqlite-dll-win32-x86-xxxxxx.zip解壓得到sqlite3.dll確認(rèn)其導(dǎo)出函數(shù)包含sqlite3_json_init用dumpbin /exports sqlite3.dll | findstr json驗(yàn)證將新 DLL 復(fù)制到 SQLiteSpy 同目錄重命名為sqlite3_custom.dll不能覆蓋原sqlite3.dll否則啟動(dòng)失敗啟動(dòng) SQLiteSpy →Tools→Options→Advanced→ 勾選Use custom SQLite DLL→ 瀏覽選擇sqlite3_custom.dll重啟執(zhí)行SELECT sqlite_version();確認(rèn)版本已更新注意自定義 DLL 必須與 SQLiteSpy 編譯架構(gòu)一致1.7.9 為 x86勿用 x64 DLL。若報(bào)錯(cuò)無法啟動(dòng)此程序因?yàn)橛?jì)算機(jī)中丟失 sqlite3.dll說明 DLL 架構(gòu)不匹配或依賴缺失用Dependency Walker檢查。我用 SQLiteSpy 十年從 XP 時(shí)代的1.5.0用到現(xiàn)在的1.7.9最深的體會(huì)是它不炫技但每一步操作都經(jīng)得起產(chǎn)線壓力——沒有后臺(tái)服務(wù)拖慢系統(tǒng)沒有 JS 渲染卡頓高分屏沒有云同步泄露客戶數(shù)據(jù)。當(dāng)你面對(duì)一個(gè)黑盒.db文件需要 30 秒內(nèi)知道它有沒有users表、password字段是不是明文、最近一條記錄的時(shí)間戳是多少SQLiteSpy 就是那把最順手的螺絲刀。它不教你數(shù)據(jù)庫原理但它讓你在原理之外先拿到答案。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取