You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用AutoLISP创建、打开SQLite数据库并执行INSERT INTO操作?

AutoLISP 操作 SQLite 数据库:创建、打开与数据插入

AutoCAD 2013及以上版本内置了SQLite支持,通过sqlite3-*系列原生函数即可完成数据库操作,以下是具体实现步骤:

1. 创建/打开数据库

使用sqlite3-open函数,传入数据库文件路径即可:若文件不存在则自动创建,存在则直接打开,返回数据库句柄(失败返回nil)。

;; 定义数据库路径(示例为AutoCAD支持文件夹,可替换为绝对路径)
(setq db-path (strcat (getenv "APPDATA") "\\Autodesk\\AutoCAD 2024\\R24.3\\chs\\Support\\test_db.db"))

;; 打开/创建数据库
(setq db-handle (sqlite3-open db-path))

;; 检查操作结果
(if (not db-handle)
    (alert "数据库打开/创建失败!")
    (progn
        (princ "\n数据库打开/创建成功,句柄:")
        (princ db-handle)
    )
)

2. 创建数据表(插入数据前需先建表)

通过sqlite3-exec执行CREATE TABLE语句,建议加上IF NOT EXISTS避免重复创建。

(when db-handle
    ;; 定义建表SQL:创建users表,包含自增主键id、姓名name、年龄age
    (setq create-sql "CREATE TABLE IF NOT EXISTS users (
                        id INTEGER PRIMARY KEY AUTOINCREMENT,
                        name TEXT NOT NULL,
                        age INTEGER
                      );")
    ;; 执行SQL
    (if (sqlite3-exec db-handle create-sql)
        (princ "\n数据表创建成功")
        (alert "数据表创建失败!")
    )
)

3. 执行INSERT INTO插入数据

提供两种实现方式,推荐用参数绑定方式避免SQL注入风险。

方式1:直接拼接SQL语句(适合固定数据场景)

(when db-handle
    (setq insert-sql (strcat "INSERT INTO users (name, age) VALUES ('张三', 26);"))
    (if (sqlite3-exec db-handle insert-sql)
        (princ "\n数据插入成功")
        (alert "数据插入失败!")
    )
)

方式2:参数绑定(推荐,安全灵活)

通过sqlite3-prepare预处理SQL,用?作为占位符,再绑定具体参数后执行。

(when db-handle
    ;; 预处理INSERT语句
    (setq stmt (sqlite3-prepare db-handle "INSERT INTO users (name, age) VALUES (?, ?);"))
    (if stmt
        (progn
            ;; 绑定参数:索引从1开始,第一个参数绑定字符串"李四"
            (sqlite3-bind-text stmt 1 "李四")
            ;; 第二个参数绑定整数28
            (sqlite3-bind-int stmt 2 28)
            ;; 执行语句,SQLITE_DONE表示执行完成
            (if (= (sqlite3-step stmt) SQLITE_DONE)
                (princ "\n参数绑定方式插入数据成功")
                (alert "参数绑定插入失败!")
            )
            ;; 关闭预处理语句,释放资源
            (sqlite3-finalize stmt)
        )
        (alert "预处理SQL语句失败!")
    )
)

4. 关闭数据库

操作完成后必须关闭数据库句柄,释放系统资源:

(when db-handle
    (sqlite3-close db-handle)
    (princ "\n数据库已关闭")
)

核心函数说明

  • sqlite3-open:打开/创建数据库,返回句柄
  • sqlite3-exec:直接执行完整SQL语句
  • sqlite3-prepare:预处理SQL,支持参数绑定
  • sqlite3-bind-text/sqlite3-bind-int:绑定字符串/整数类型参数
  • sqlite3-step:执行预处理后的SQL语句
  • sqlite3-finalize:关闭预处理语句
  • sqlite3-close:关闭数据库连接

内容的提问来源于stack exchange,提问作者水野 志

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 13:52:38