java - 如何修复“sqlite-3.7.2-sqlitejdbc.dll:无法在 AMD 64 位平台上加载 IA 32 位 .dll”
问题描述
我想加载 sqlite 空间函数,所以我执行 stmt.execute("SELECT load_extension('mod_spatialite')"); 然后我得到错误: java.lang.UnsatisfiedLinkError: C:\Users\17222\AppData\Local\Temp\sqlite-3.7.2-sqlitejdbc.dll: Can't load IA 32-bit .dll on a AMD 64-位平台
我尝试删除 sqlite-3.7.2-sqlitejdbc.dll 并下载一个 64 位的函数并放入文件中。但是当我再次运行代码时,我发现 sqlite-3.7.2-sqlitejdbc.dll(32-一口版本)将由代码生成,它将覆盖下载的版本。
事实上,我之前已经在同一台机器上成功运行过它。它可以执行一些空间sql函数,但是当我新建一个项目并重复它时,就会出现错误。
这里有一些代码:
String path = System.getProperty("java.library.path");
System.out.println(path);
// 加载JDBC
Class.forName("org.sqlite.JDBC");
Connection conn = null;
try {
// absolutely required by SpatiaLite
SQLiteConfig config = new SQLiteConfig();
config.enableLoadExtension(true);
// create a database connection
conn = DriverManager.getConnection("jdbc:sqlite:C:\\sqlite-tools-win32-x86-3290000\\OrgDBForCheck.db3",
config.toProperties());
Statement stmt = conn.createStatement();
stmt.setQueryTimeout(30);
// loading SpatiaLite
stmt.execute("SELECT load_extension('mod_spatialite')");
ResultSet rs = stmt.executeQuery("SELECT aswkt(geometry)\n" +
" FROM AD_HP\n" +
"where X(Geometry)>120\n");
解决方案
问题是您的 sqlite jar 文件仅包含 32 位 .dll 您可以检查它是否有两个 .dll 用于 32 位和 64 位版本。
这是下载正确驱动程序 jar 文件的链接https://bitbucket.org/xerial/sqlite-jdbc/downloads/
推荐阅读
- ios - 使用多个身份验证提供程序的 Firebase 电话身份验证
- qt - 在 QMessageBox 中显示 QListView
- buffer - 缓冲区中的 p5.js 图像
- python - 使用 django-filter 和 django-table2 的 CBV
- flutter - 如何单击一个按钮并在颤动中启用另一个按钮?
- reactjs - 如何使用 React js 处理非常大的文件下载
- sql - 对 XML 节点中的每个元素进行计数,而不是连续计数
- python - 如何为我的单元测试模拟烧瓶装饰器@login_required?
- r - 如何在 R 中动态地改变数据框中的列
- ubuntu - CC3200 LaunchXL 与 ubuntu 和 VSCODE