iT邦幫忙

1

一個寫了8年的資料庫工具 – JasonQuery,現在正式開源

  • 分享至 

  • xImage
  •  

一個寫了 8 年、至今仍持續更新的資料庫工具:JasonQuery,現在正式開源…

2022 年,我曾經第一次在 IT 邦幫忙介紹 JasonQuery,當時我原本期望可以在 2022年把它開源:
【原創】自製資料庫管理工具 - JasonQuery

結果,真正走到「可以放心公開」這一步,比我當時想像得久得多。
而且,這4年來我一直在做一件事
如何讓不認識我的人,可以安心的下載並使用 JasonQuery?

不只是「程式能不能執行」,還包括資料安全、舊版本相容、Transaction、Recovery、更新完整性、第三方授權,以及開源之後別人能不能理解這個專案到底在做什麼。

現在,JasonQuery 終於正式開源了。

overview

JasonQuery GitHub 倉庫
JasonQuery 官網
JasonQuery Release Notes

JasonQuery 特別重視的幾件事:

🔍 SQL 行為透明、可追查

我不喜歡 SQL Tool 在背後執行了一些 SQL,等出錯時,使用者卻不知道工具到底做了什麼。
所以 JasonQuery 的設計原則之一就是:
SQL Tool 不應該偷偷做事。

  • 使用者執行的 SQL 有紀錄:SQL History 保留 SQL 執行歷程,方便之後查閱。
  • 工具自己的 SQL 也盡量保持可見:例如 AutoComplete 等 JasonQuery 支援的內部流程,其實也可能需要向資料庫發出 SELECT SQL,這些 SQL 也可以從 SQL History 中查閱。
  • 出錯時有跡可循:例如 AutoComplete 因資料庫錯誤而失敗時,不只顯示簡短提示,使用者也可以進一步從 SQL History 查看實際執行的 SQL 與錯誤資訊。

這不是要把 SQL History 做成企業級 Audit Log,而是希望:
當工具和資料庫之間發生了什麼事情時,使用者有辦法追查。

SQL History, Transparency

🛡️ Transaction 安全:不要讓未完成的 Transaction 被忘記

  • Commit or Rollback?由您自己做主:
    Auto Commit 很方便,但 JasonQuery 選擇保留明確的 Commit / Rollback 決定。
    當一個連線仍存在尚未完成的 Transaction 時,問題不只是「還沒 Commit」而已——它也可能持續持有資料庫 lock,進而影響其他 Session。

因此 JasonQuery 提供 Pending Transaction Reminder。
當 Transaction 持續未完成時,主畫面會顯示其狀態,並定期提醒使用者:
這個 Transaction 還沒有 Commit 或 Rollback。
目的不是替使用者自動決定,而是避免使用者工作到一半,把它忘掉了。

對 locking query 也是一樣。
例如在支援 SELECT ... FOR UPDATE 的資料庫中,雖然 SQL 是以 SELECT 開頭,但它並不是一般單純的唯讀查詢;它會涉及 Transaction 與 Locking。
JasonQuery 會把這類需要注意 Transaction 狀態的操作納入提醒機制,而不是因為它叫做 SELECT 就忽略它。
Commit 或 Rollback,由使用者決定;JasonQuery 負責不要讓這個決定被忘記。

Locking Query Safety

🔐 本機資料安全:JasonQuery.db 不只是「加個密碼」

JasonQuery 自己也需要保存設定、連線資訊及其他的設定資料。
到了 v0.96,我重新整理了整個 JasonQuery.db 的 security 與 storage architecture。
目前新建立的 JasonQuery.db 採用 SQLCipher 4-compatible storage format,並由獨立產生的 logical database key 保護。
JasonQuery 提供兩種保護方式:

  • Windows Protected:將保護機制綁定目前的 Windows 使用者環境。
  • Custom Password:由使用者自行設定密碼保護 JasonQuery.db。

但我後來發現,只做到「加密」還不夠。
如果 Windows 重灌了,或者原本的 Windows User Profile / DPAPI 環境損毀,資料加密得再安全,如果連合法使用者自己都永遠救不回來,也是一個問題。
所以 v0.96 又加入了 Recovery Key。
在 Windows Protected 模式下,使用者可以預先建立 Recovery Key;如果未來原本的 Windows 保護環境已經不存在,可以透過 Recovery Key 驗證 JasonQuery.db 的配對關係,重新建立目前 Windows 使用者的保護。
錯誤、不匹配或遭修改的 Recovery Key 會被拒絕,而不應該因此錯誤修改既有的 JasonQuery.db。
另外,舊版 Storage V1 → Storage V2 的升級也不是單純「解密後再存一份」。

對我來說:
資料安全不只是「能不能加密」,還包括升級失敗時能不能停下來,以及災難發生後,合法使用者能不能把資料救回來。

🎨 環境辨識:讓自己一眼知道現在連到哪個資料庫了

操作資料庫時,一個很常見、也很危險的問題:
我現在連的是 Production,還是 Test?

JasonQuery 可以讓不同連線使用不同的顏色與 Icon。
例如你可以自己約定:

  • 🔴 紅色:Production,要特別小心。
  • 🟢 綠色:Test / Development,可以放心操作。
  • 其他顏色:依照自己喜好選擇。

環境的顏色意義由使用者定義,JasonQuery 負責讓這個差異在畫面上足夠明顯。

這是一個很小的功能,但我自己認為,資料庫工具裡很多真正有價值的設計,往往就是這種「少犯一次錯就值得」的功能。

Environment Safety

JasonQuery 也有很明確的限制

我不希望只介紹 JasonQuery 可以做什麼,而不說它不能做什麼。

Windows Only

JasonQuery 目前只支援 Windows x64。這是一個有意識的取捨。
JasonQuery 是一人維護的專案。與其把有限的時間分散到 Windows、Linux、macOS,再讓每個平台都只能做到一部分功能,我選擇先把 Windows 版本做好。
結論:目前沒有跨平台計畫。

.NET Framework 4.8 / WinForms

JasonQuery 是一個從 2018 年一路演進至今的 WinForms application,目前使用 .NET Framework 4.8、C# 8.0、x64。
我沒有因為新的 UI framework 出現,就把整套程式重新改寫一次。
對 JasonQuery 而言,目前更重要的是既有功能、資料相容性、Transaction、Recovery 與 database-specific behavior 能不能持續可靠運作,而不是為了技術更新本身進行大型 rewrite。

Source Build 需要部分第三方套件

JasonQuery-owned source 已經以 MIT License 開源,但這不代表所有 dependency 都能一起放進 repository。
JasonQuery 使用了一些第三方元件,例如:

  • MESCIUS ComponentOne WinForms
  • Devart .NET Framework database providers
    這些元件有各自的授權條款,因此不會把 vendor binaries 或授權內容直接提交到 JasonQuery repository。
    一般使用者可以直接使用正式發布的 JasonQuery package;如果要自行從 source build,則需要依照 BUILD.md 準備相應的 dependency 與合法授權/evaluation environment。
    這也是我認為開源很重要的一部分:
    哪些東西是我的、哪些不是;哪些可以公開、哪些需要另外取得,都應該說清楚。

八年後,JasonQuery 還會繼續做下去

JasonQuery 當然不是一個「所有功能都已經做完」的專案。
八年來它一直在演進,到現在也還在持續更新。
只是和 2022 年最大的差別是:
當時,我只是希望有一天可以把它放到 GitHub。
現在,我希望做到的是:
讓一個不認識我的人,也能知道它能做什麼、不能做什麼;可以放心下載,也可以看得懂我為什麼這樣設計。

如果你平常使用 Oracle、PostgreSQL、SQL Server 或 MySQL,歡迎實際下載試試看。
遇到問題,也歡迎到 GitHub 開 Issue。
JasonQuery can do more than you think.


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
尼克
iT邦大師 1 級 ‧ 2026-10-06 16:36:20

能用自己的英文名,發表一套開源軟體,真是厲害還能堅持那樣久的時間,我真是要給你加油及鼓勵。

JasonYu iT邦新手 5 級 ‧ 2026-10-06 18:01:45 檢舉

我要留言

立即登入留言