SQLite 推新版本~修復資料庫損壞漏洞以及漂亮呈現的QRF(Query Result Formatter)

SQLite 是全世界應用最廣泛的嵌入式資料庫引擎,從手機 App、瀏覽器到物聯網裝置都能看到它的身影。2026 年 7 月 24 日發布的 3.53.4 版本,除了修補前幾個小版本(3.53.1~3.53.3)遺留的問題外,也整合了自 3.53.0 以來累積的多項重要功能。以下用淺顯的方式,把這次更新拆解成幾個重點面向來介紹。

一、最值得關心的修復:資料庫損壞漏洞

這次更新最關鍵的一項,是修復了與 WAL(Write-Ahead Log,預寫式日誌)重置有關的資料庫損壞問題。WAL 是 SQLite 用來提升寫入效能與並行處理能力的機制,一旦這個環節出錯,最壞情況可能導致資料庫檔案損毀。對一般使用者來說,這代表:只要有使用資料庫寫入操作的應用程式,都建議儘快升級到這個版本,以避免潛在的資料遺失風險。

二、新增QRF(Query Result Formatter)

QRF(Query Result Formatter)是這次版本很有特色的新功能,簡單來說,它能把 SQL 查詢結果自動排版成整齊的表格,方便在文字介面(例如命令列視窗)中閱讀,例如數字會自動靠右對齊、輸出以框線字元組成表格。這對於習慣用命令列工具查資料庫的工程師或維運人員來說,等於是「不用額外工具,資料庫自己就把報表排版好了」。目前互動式命令列(CLI)已預設採用這種新格式,而批次執行(例如寫腳本自動跑 SQL)則仍維持舊格式,避免既有自動化流程被打亂。

三、SQL 語法更靈活

這次也強化了 SQL 語言本身的能力,重點包括:

  • ALTER TABLE 更彈性:現在可以直接新增或移除欄位的 NOT NULL、CHECK 限制條件,不需要像以前一樣重建整張表。
  • REINDEX EXPRESSIONS:可以單獨重建「表達式索引」(例如根據函數運算結果建立的索引),用來修復索引過期失效的問題。
  • VACUUM INTO 加強:備份資料庫時可以透過 URI 參數指定保留空間大小,方便預留未來成長空間。
  • 新增了 json_array_insert()jsonb_array_insert() 兩個 JSON 處理函數,讓操作 JSON 陣列更方便。

四、查詢效能與規劃器的優化

SQLite 的「查詢規劃器」負責決定一條 SQL 該怎麼執行最有效率,這次做了幾項調整:對於 EXCEPT、INTERSECT、UNION 這類集合運算,一律改用排序合併演算法,官方說明這樣「幾乎總是」比雜湊表快;另外也改善了多表格連接(JOIN)時的順序選擇邏輯,減少不必要的運算。對開發者而言,這些改動通常不需要修改任何程式碼,資料庫會自動跑得更快。

五、浮點數精度改變 — 需要留意的相容性議題

比較值得注意的是,浮點數與文字互相轉換的精度,預設從過去的 15 位有效數字,提升到 17 位。這代表數字顯示可能比以前更精確,但也可能讓某些依賴舊有顯示格式的程式或測試出現差異。如果需要維持舊行為,可以透過 SQLITE_DBCONFIG_FP_DIGITS 設定調整回來。這是一個「預設值改變」型的更新,建議有大量數值運算的系統在升級前先做測試。

六、命令列工具(CLI)多項細節優化

命令列工具本身也有不少貼心的小改進,例如 .timer 指令可以設定只計時下一句 SQL、.progress 可以設定逾時自動中斷查詢、.indexes 指令的搜尋邏輯改為比對索引名稱本身(而非資料表名稱),讓搜尋功能真正符合預期。另外要特別提醒:點指令結尾若有沒加引號的分號,現在會被直接忽略,這是一項可能造成相容性問題的改變,若有腳本依賴舊行為,需要特別檢查。

七、其他技術亮點

新增了多個 C 語言介面函數,方便進階開發者操作字串緩衝區與虛擬表;Session 擴充功能新增了逐項新增變更的介面,方便做資料同步;JavaScript/WASM 版本則新增了 opfs-wl 檔案系統選項,透過瀏覽器的 Web Locks 機制達到更公平的鎖定共享,不過需要較新版本的瀏覽器支援。

重點總結

如果只想記住三件事:第一,這個版本修了一個可能造成資料庫損壞的漏洞,建議儘快升級;第二,新增的 QRF 讓命令列查詢結果變得更好讀;第三,浮點數精度與分號規則有變動,升級前建議簡單測試一下既有系統是否受影響。

需要特別說明的是,官方頁面提到 3.53.4 這個修補版本,主要是為了修正前幾個版本(3.53.1 至 3.53.3)中「主要由人工智慧引起的問題」,詳細細節官方僅指向提交紀錄,並未在頁面上進一步展開說明。

使用SQLite Expert將access資料匯入SQLite

因為要撰寫PC轉到手機的程式,所以需要將手上的ACCESS轉到SQLite上。可以使用SQLite Expert這個工具來轉資料,不過需要付費的Professional才有。
sqliteaccess001
點選 Fiel -> New Database
sqliteaccess002
輸入要新建db的路徑,程式會根據database name建立對應的alias
sqliteaccess003

 

建立完成後就看到有新的Database

sqliteaccess004

 

接下來點選上面的 Import/Export->Data Transfer Wizard,會有對話框問你要Export匯出或Import匯入。然後下面是匯入的方式是使用SQL或是ADO data source

sqliteaccess006

接著會問你用什麼方式連線,可以 Use Connection String按Build

sqliteaccess007

 

點選Microsoft Jet 4.0 OLE DB Provider連結access

sqliteaccess008

選取我們要連的db

sqliteaccess009

接著開始匯入

sqliteaccess010

中間會出現login畫面直接按ok

sqliteaccess011

接著會問你要匯入那個table

sqliteaccess012

完成後系統使最後確認

sqliteaccess013

開始匯入資料

sqliteaccess014

匯入完畢後就可以看到塞進去的table跟資料了sqliteaccess015

 

 

Delphi透過odbc連結SQLite

Delphi5~7連接SQLite可以透過上述網站的SQLite ODBC Driver,透過ADO元件連結資料庫。

這樣一來,在開發行動裝置時。透過SQLite Expert建置完資料庫後,利用Delphi做資料整理~
再將資料放在Android 的asseets 或是iOS放在app document,core data初始化時再copy過去。

P.S Delphi 連線字串
DRIVER=SQLite3 ODBC Driver;Database=c:\test\test.db;LongNames=0;Timeout=1000;NoTXN=0;SyncPragma=NORMAL;StepAPI=0;

 

http://www.sqliteexpert.com/

http://www.ch-werner.de/sqliteodbc/

 

【Delphi XE4】sqlite3.dll not found解決方式

Delphi XE4開發iOS資料庫時,Data Explorer建立SQLite連線時,Test Connection時出現 Failed: “sqlite3.dll not found”的訊息。

sqlite3dllnotfound

解決方式:

1.到 SQLite 網站 http://www.sqlite.org/

2.下載 sqlite-dll-win32-x86-3071700.zip

3.解壓縮後將 sqlite3.dll 複製到 C:\WINDOWS\system (64 bit則複製 c:\windows\sysWOW64 、 C:\Windows\System32 )