在Tcl中启用SQLite的enable_load_extension时遇命令名错误求助
问题根源与解决方案
你的问题其实很典型——Tcl是大小写敏感的语言,而你在调用扩展启用命令时搞错了数据库句柄的大小写!
看你的代码:
sqlite3 dbhandle example.db # 这里创建的句柄是全小写的 `dbhandle` # 但你注释里的调用都是驼峰式的 `dbHandle`: # dbHandle enable_load_extension 1 ; #invalid command name "dbHandle"
Tcl里,你用sqlite3命令创建的句柄是一个自定义Tcl命令,它的名称严格区分大小写。你创建的是dbhandle(小写h),但调用时写成了dbHandle(大写H),Tcl自然找不到这个命令,所以抛出"invalid command name"错误。
正确的调用方式
把句柄名改成和创建时一致的全小写即可:
dbhandle enable_load_extension 1
补充说明
- 你检查编译选项的结果没问题,确实没有
SQLITE_OMIT_LOAD_EXTENSION,所以SQLite本身支持扩展加载,不需要用到C接口的sqlite3_db_config——Tcl的SQLite绑定已经把这个功能封装成了句柄的enable_load_extension子命令,只要句柄名正确就能调用。 - 你后面的常规查询
dbhandle eval {SELECT ...}能正常运行,正是因为这里用对了正确的句柄名dbhandle,和创建时一致。
只要修正句柄名的大小写,启用扩展的命令就能正常工作了。
内容的提问来源于stack exchange,提问作者njamescouk
相关产品推荐
相关产品推荐

