SQLite 命令行客戶端 + Windows 批處理應用
- 下載 SQLite 客戶端
- 1. Bat 輔助腳本
- 1. 執行SQL.bat
- 執行
- 2. 導出Excel.bat
- 執行
- 效果
- 3. 導出HTML.bat
- 執行
- 效果
- 4. 清空-訂單表.bat
- 5. 訂單表.bat
- 2. 測試 SQL
- 1. 創建訂單表.sql
- 2. 插入訂單表.sql
- 3. 查詢訂單表.sql
- 4. 清空訂單表.sql
- 5. 刪除訂單表.sql
- 參考資料
下載 SQLite 客戶端
https://www.sqlite.org/download.html
我開發環境是 win11 所以下的這個:
1. Bat 輔助腳本
將 sqlite3.exe
,MY_DB.db
, 所有bat
放在一起。
當然也可以直接把 sqlite3.exe
添加到環境變量。
1. 執行SQL.bat
@echo off
CHCP 65001 > nul
REM 定義sqlite3 路徑,數據庫文件路徑
SET "SQLITE3_EXE=sqlite3.exe"
SET "DB_FILE=MY_DB.db"
SET "TEMP_FILE_NAME=temp_filt_4_import_sql_rename.txt"
SET "TEMP_SQL_FILE=temp_sql_filt_4_import.txt"echo ------------------------------------------
echo 開始執行 SQL 文件!
echo ------------------------------------------
REM 遍歷所有參數(sql文件),逐個導入
:IMPORT_LOOP
IF "%~1"=="" GOTO :END_OF_FILES
echo 正在執行: %~1
echo BEGIN TRANSACTION; > %TEMP_SQL_FILE%
copy %~1 %TEMP_FILE_NAME% > nul
echo .read %TEMP_FILE_NAME% >> %TEMP_SQL_FILE%
echo COMMIT; >> %TEMP_SQL_FILE%
"%SQLITE3_EXE%" "%DB_FILE%" < %TEMP_SQL_FILE%
del %TEMP_FILE_NAME%
del %TEMP_SQL_FILE%
echo 執行完成: %~1
echo.
REM 移向下一項: SHIFT命令用于移動參數列表,使得%~1變為下一個文件,從而實現逐個處理。
SHIFT
GOTO :IMPORT_LOOP:END_OF_FILES
echo ------------------------------------------
echo 所有 SQL 文件執行結束!
echo ------------------------------------------
PAUSE
執行
寫好 sql
文件,拖放到此 bat
上即可執行
2. 導出Excel.bat
有時為了方便查在這里插入代碼片
看數據,需要導出 excel。
@echo off
CHCP 65001 > nul
REM 定義sqlite3 路徑,數據庫文件路徑
SET "SQLITE3_EXE=sqlite3.exe"
SET "DB_FILE=MY_DB.db"
SET "TEMP_FILE_NAME=temp_filt_4_import_sql_rename.txt"
SET "TEMP_SQL_FILE=temp_sql_filt_4_import.txt"echo ------------------------------------------
echo 導出表格到 excel 開始
echo ------------------------------------------
REM 遍歷所有參數(sql文件),逐個導入
:IMPORT_LOOP
IF "%~1"=="" GOTO :END_OF_FILES
echo 正在導出 Excel: %~1copy %~1 %TEMP_FILE_NAME% > nul
echo BEGIN TRANSACTION; > %TEMP_SQL_FILE%
echo .headers on >> %TEMP_SQL_FILE%
echo .excel >> %TEMP_SQL_FILE%
echo .read %TEMP_FILE_NAME% >> %TEMP_SQL_FILE%
echo COMMIT; >> %TEMP_SQL_FILE%
"%SQLITE3_EXE%" "%DB_FILE%" < %TEMP_SQL_FILE%
del %TEMP_FILE_NAME%
del %TEMP_SQL_FILE%echo 完成導出 Excel: %~1
echo.
REM 移向下一項: SHIFT命令用于移動參數列表,使得%~1變為下一個文件,從而實現逐個處理。
SHIFT
GOTO :IMPORT_LOOP:END_OF_FILES
echo ------------------------------------------
echo 導出表格到 excel 結束
echo ------------------------------------------
PAUSE
執行
只要寫好SQL文件,拖上來執行即可
效果
3. 導出HTML.bat
@echo off
setlocal enabledelayedexpansion
CHCP 65001 > nul
REM 定義sqlite3 路徑,數據庫文件路徑
SET "SQLITE3_EXE=sqlite3.exe"
SET "DB_FILE=MY_DB.db"
SET "TEMP_FILE_NAME=sql_file_rename.txt"
SET "TEMP_SQL_FILE=temp_sql_file_4_execution.txt"
set "OUTPUT_HTML_FILE=temp_table.html"echo ------------------------------------------
echo 導出表格到 HTML 開始
echo ------------------------------------------
REM 遍歷所有參數(sql文件),逐個導入
:IMPORT_LOOP
IF "%~1"=="" GOTO :END_OF_FILES
echo 開始導出: %~n1.htmlREM 使用 sqlite3 導出表格到臨時文件 temp_table.html
copy %~1 %TEMP_FILE_NAME% > nul
echo .mode html >> %TEMP_SQL_FILE%
echo .headers on >> %TEMP_SQL_FILE%
echo .output %OUTPUT_HTML_FILE% >> %TEMP_SQL_FILE%
echo .read %TEMP_FILE_NAME% >> %TEMP_SQL_FILE%
echo .output stdout >> %TEMP_SQL_FILE%
"%SQLITE3_EXE%" "%DB_FILE%" < %TEMP_SQL_FILE%
del %TEMP_FILE_NAME%
del %TEMP_SQL_FILE%REM 讀取 temp_table.html 拼接在一個變量 CONTENT 里
for /f "usebackq delims=" %%i in ("%OUTPUT_HTML_FILE%") do set "CONTENT=!CONTENT!%%i!"REM 構建完整的 HTML 文檔并輸出
> %~n1.html (echo ^<^^!DOCTYPE html^>echo ^<html^>echo ^<head^>echo ^<title^>%~n1^</title^>echo ^<head^>echo ^<body^>echo ^<table^>echo !CONTENT!echo ^</table^>echo ^</body^>echo ^</html^>)
REM 刪除臨時文件
del %OUTPUT_HTML_FILE%
echo 完成導出: %~n1.html
echo.
REM 移向下一項: SHIFT命令用于移動參數列表,使得%~1變為下一個文件,從而實現逐個處理。
SHIFT
GOTO :IMPORT_LOOP:END_OF_FILES
echo ------------------------------------------
echo 導出表格到 HTML 結束
echo ------------------------------------------
endlocalPAUSE
執行
寫好 sql
文件,拖放到此 bat
上即可執行
效果
4. 清空-訂單表.bat
對于需要反復執行的操作,比如:清空某個表,也可以直接寫個批處理:雙擊使用即可
@echo off
CHCP 65001 > nul
echo 清空:訂單表
sqlite3 MY_DB.db "DELETE FROM `訂單表`;"
echo 清空:完成
pause
5. 訂單表.bat
常用查詢直接寫個批處理,要用時雙擊即可。
@echo off
CHCP 65001 > nul
sqlite3.exe MY_DB.db ".mode column" ".headers on" ".width 10 10 10 10 10 20" "SELECT * FROM 訂單表;"
pause
2. 測試 SQL
1. 創建訂單表.sql
CREATE TABLE 訂單表 (OrderID INTEGER PRIMARY KEY,CustomerName TEXT NOT NULL,ProductName TEXT NOT NULL,Quantity INTEGER NOT NULL,Price REAL NOT NULL,OrderTime TEXT NOT NULL
);
2. 插入訂單表.sql
INSERT INTO 訂單表 (CustomerName, ProductName, Quantity, Price, OrderTime) VALUES ('張三', '蘋果手機', 1, 5999.00, '2023-04-01 10:30:00');
INSERT INTO 訂單表 (CustomerName, ProductName, Quantity, Price, OrderTime) VALUES ('李四', '小米手環', 2, 299.00, '2023-04-02 14:15:00');
INSERT INTO 訂單表 (CustomerName, ProductName, Quantity, Price, OrderTime) VALUES ('王五', '華為筆記本', 1, 7999.00, '2023-04-03 16:45:00');
INSERT INTO 訂單表 (CustomerName, ProductName, Quantity, Price, OrderTime) VALUES ('趙六', '三星電視', 1, 4999.00, '2023-04-04 18:30:00');
3. 查詢訂單表.sql
SELECT * FROM 訂單表;
4. 清空訂單表.sql
DELETE FROM "訂單表";
5. 刪除訂單表.sql
DROP TABLE IF EXISTS "訂單表";
參考資料
sqlite 官方文檔