我想加载sqlite空间函数,所以我执行 stmt.execute(“ SELECT load_extension('mod_spatialite')”); 然后我得到错误: java.lang.UnsatisfiedLinkError:C:\ Users \ 17222 \ AppData \ Local \ Temp \ sqlite-3.7.2-sqlitejdbc.dll:无法在AMD 64位平台上加载IA 32位.dll
我尝试删除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");
答案 0 :(得分:0)
问题是您的sqlite jar文件仅包含32位.dll 您可以检查32位和64位版本是否都有两个.dll。
这是下载正确的驱动程序jar文件https://jakearchibald.github.io/svgomg/
的链接