如何使用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,提问作者水野 志
相关产品推荐
相关产品推荐

