首页
随笔记录

分类

当前位置: 云海天教程网 > 技术新闻 > 随笔记录 >正文

windows环境下 java 使用sqlite-jdbc 加载mod_spatialite用于地理空间处理

更新时间:2023-05-26  作者:佚名   来源: 网络转载

  由于项目需要,将sqlite中的数据使用空间函数(st_astext(), st_geomfromtext()等)处理空间坐标数据,这就需要加载mod_spatialite组件,从网上找了很多方法,也问了gpt,也从官网上(http://www.gaia-gis.it/gaia-sins/spatialite-cookbook/html/java.html)找到了加载mod_spatialite组件的示例,但是就是不好使,要么报“无权限”,要么报“找不到指定路径",这个问题前前后后折磨了我半个月,最终还是解决了,本着共享的原则,share出步骤

  1.去官网(https://www.gaia-gis.it/fossil/libspatialite/index)下载mod_spatialite组件压缩包,并解压

windows环境下 java 使用sqlite-jdbc 加载mod_spatialite用于地理空间处理

 2.解压后的 所有文件 都放到C:WindowsSystem32文件夹(笔者使用的是windows64位系统),这一步特别重要,也是持续折磨笔者2个周的问题所在,不然会报无权限或找不到指定路径(有的说放在java项目的根目录,或者放在同一个文件夹,都不好使)

 3.使用maven加载sqlite-jdbc, 3.8版本以上都可以,笔者使用的是3.35.0

<dependency>
     <groupId>org.xerial</groupId>
     <artifactId>sqlite-jdbc</artifactId>
      <version>3.35.0</version>
</dependency>

4.创建Connnection 时,要开启加载扩展插件的权限,附上代码,在同事的电脑上也试过, 亲测好使

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import org.sqlite.SQLiteConfig;

public class SpatialiteSample {


    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        // load the sqlite-JDBC driver using the current class loader
        Class.forName("org.sqlite.JDBC");

        Connection conn = null;
        try {
            // enabling dynamic extension loading
            // absolutely required by SpatiaLite
            System.out.println(org.sqlite.SQLiteJDBCLoader.getVersion());
//            System.setProperty("java.library.path", "E:\google-download\mod_spatialite-5.0.1-win-amd64\mod_spatialite-5.0.1-win-amd64");
            SQLiteConfig config = new SQLiteConfig();
            config.enableLoadExtension(true);
            conn = config.createConnection("jdbc:sqlite:spatialite-test.sqlite");
            // create a database connection
//            conn = DriverManager.getConnection("jdbc:sqlite:spatialite-test.sqlite?enable_load_extension=1"
//                    );
//            conn.enableLoadExtension(true);
            Statement stmt = conn.createStatement();
            stmt.setQueryTimeout(30); // set timeout to 30 sec.

            // loading SpatiaLite
            stmt.execute("SELECT load_extension("mod_spatialite")");

            // checking SQLite and SpatiaLite version + target CPU
            String sql = "SELECT spatialite_version(), spatialite_target_cpu()";
            ResultSet rs = stmt.executeQuery(sql);
            while (rs.next()) {
                // read the result set
                String msg = "SQLite version: ";
                msg += rs.getString(1);
                System.out.println(msg);
                msg = "SpatiaLite version: ";
                msg += rs.getString(2);
                System.out.println(msg);
            }
            // enabling Spatial Metadata
            // this automatically initializes SPATIAL_REF_SYS and GEOMETRY_COLUMNS
//            sql = "SELECT InitSpatialMetadata(1)";
//            stmt.execute(sql);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
}

最后附上截图:

windows环境下 java 使用sqlite-jdbc 加载mod_spatialite用于地理空间处理

 

上一篇:5284个中医药基本名词中医名词ACCESSEXCEL数据库 下一篇:ceph config get mgr 和 ceph mgr services 显示的内容不一致怎么办
小编推荐
快速导航更多>>
JavaScript 教程 HTML5 教程 CSS3 教程 jQuery 教程 Vue.js 教程 Node.js 教程 SQL 教程 C 教程 PHP 教程 Linux 教程 Docker 教程 Nginx 教程 Python 教程 Java 教程

云海天教程网 版权所有

 陕公网安备 61050202000585号

陕ICP备14013131号-3