sqlite - 为 SQLite 扩展编译 DLL - xerial/sqlite-jdbc 驱动程序 - 用于 unionvtab 和 swarmvtab
问题描述
我确实在 VS2019 上使用命令行成功编译了扩展 DLL。
(工具/命令行/开发人员CMD)
原目录内容:
shell.c
sqlite3.c
sqlite3.h
sqlite3ext.h
unionvtab.c
命令:
cl unionvtab.c /link /dll /out:unionvtab.dll
目录内容 - 成功构建:
shell.c
sqlite3.c
sqlite3.h
sqlite3ext.h
unionvtab.c
unionvtab.dll
unionvtab.exp
unionvtab.lib
unionvtab.obj
使用 sqlite3.exe:
sqlite> .tables
sqlite> SELECT load_extension('C:/...some dirs.../unionvtab');
sqlite> PRAGMA module_list;
swarmvtab
zipfile
unionvtab
completion
fsdir
sqlite_stmt
json_tree
json_each
fts4aux
fts3
fts4
sqlite_dbptr
fts3tokenize
sqlite_dbdata
generate_series
fts5vocab
dbstat
fts5
rtree
rtree_i32
sqlite_dbpage
sqlite> CREATE VIRTUAL TABLE temp.xxx USING swarmvtab ("SELECT 'C:\users\username\dirname\dbname','tablename',0,999999999");
sqlite> .tables
temp.xxx
sqlite> select somecolumn from xxx where somecolumn = '000900000';
000900000
sqlite>
一切都很完美。
当我尝试(在 DBEAVER 中)时:
SELECT load_extension('C:/...some dirs.../unionvtab');
我得到:
org.sqlite.SQLiteException: [SQLITE_ERROR] SQL 错误或缺少数据库(%1 不是有效的 Win32 应用程序。 ) 在 org.sqlite.core.DB.newSQLException(DB.java:941) 在 org.sqlite.core.DB.newSQLException(DB.java:953) 在 org.sqlite.core.DB.execute(DB.java:857) 在 org.sqlite.core.CoreStatement.exec(CoreStatement.java:80) 在 org.sqlite.jdbc3.JDBC3Statement.execute(JDBC3Statement.java:53) 在 org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCStatementImpl.execute(JDBCStatementImpl.java:330) 在 org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCStatementImpl.executeStatement(JDBCStatementImpl.java:130) 在 org.jkiss.dbeaver.ui.editors.sql.execute.SQLQueryJob.executeStatement(SQLQueryJob.java:513) 在 org.jkiss.dbeaver.ui.editors.sql.execute.SQLQueryJob.lambda$0(SQLQueryJob.java:444) 在 org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:171) 在 org.jkiss.dbeaver.ui.editors.sql.execute.SQLQueryJob.executeSingleQuery(SQLQueryJob.java:431) 在 org.jkiss.dbeaver.ui.editors.sql.execute.SQLQueryJob.extractData(SQLQueryJob.java:816) 在 org.jkiss.dbeaver.ui.editors.sql.SQLEditor$QueryResultsContainer.readData(SQLEditor.java:3440) 在 org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:118) 在 org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:171) 在 org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:116) 在 org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:4718) 在 org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:105) 在 org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)
解决方案
推荐阅读
- raster - 将栅格地图合并到 CSV(带值)以创建(地理)栅格地图
- mysql - 如何将空 DateTime 对象作为参数传递给 MySQL 数据库?
- python - 如何在 Selenium/Firefox 中以私有模式访问 cookie?
- ios - 连接核心蓝牙或经典蓝牙设备是否需要 CoreLocation 框架
- django - 为什么 Django API Get 工作但 Post 不工作?
- xml - 如何在java中读取xep文件数据
- excel - 如何将 worksheetfunction.large 与数组一起使用?
- javascript - 块的响应金字塔对齐
- ios - 如何将通用协议作为函数参数传递
- c - 如何在不使用数组的情况下按升序对数字进行排序?