首页 > 解决方案 > 如何修复“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");

标签: javasqlitespatialite

解决方案


问题是您的 sqlite jar 文件仅包含 32 位 .dll 您可以检查它是否有两个 .dll 用于 32 位和 64 位版本。

这是下载正确驱动程序 jar 文件的链接https://bitbucket.org/xerial/sqlite-jdbc/downloads/


推荐阅读