SQLite 命令行客户端 + Windows 批处理应用
- 下载 SQLite 客户端
- 1. Bat 辅助脚本
- 1. 执行SQL.bat
- 执行
- 2. 导出Excel.bat
- 执行
- 效果
- 3. 导出HTML.bat
- 执行
- 效果
- 4. 清空-订单表.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: %~1
copy %~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.html
REM 使用 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 ------------------------------------------
endlocal
PAUSE
执行
写好 sql
文件,拖放到此 bat
上即可执行
效果
4. 清空-订单表.bat
对于需要反复执行的操作,比如:清空某个表,也可以直接写个批处理:双击使用即可
@echo off
CHCP 65001 > nul
echo 清空:订单表
sqlite3 MY_DB.db "DELETE FROM `订单表`;"
echo 清空:完成
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 官方文档