首页 > 解决方案 > 为 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)

标签: sqlitejdbcdbeaver

解决方案


推荐阅读