首页 > 数据库 >windows环境下 java 使用sqlite-jdbc 加载mod_spatialite用于地理空间处理

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

时间:2023-05-26 13:33:06浏览次数:45  
标签:sqlite jdbc java spatialite sql mod

  由于项目需要,将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组件压缩包,并解压

 2.解压后的 所有文件 都放到C:\Windows\System32文件夹(笔者使用的是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);
        }
    }
}

最后附上截图:

 

标签:sqlite,jdbc,java,spatialite,sql,mod
From: https://www.cnblogs.com/yayin/p/17434283.html

相关文章

  • Java大文件分片上传/多线程上传代码
    ​ 我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用。首先我们需要了解的是上传文件三要素:1.表单提交方式:post(get方式提交有大小限制,post没有)2.表单的enctype属性:必须设置为multipart/form-data.3.表单必须......
  • 【MCA】Java互联网高级架构师马SB
    【MCA】Java互联网高级架构师马SBdownload:3w51xuebccomgRPC云原生微服务开发随着企业信息化建设的不断深入,以及互联网技术的快速发展,微服务架构已经成为当前比较热门的一种架构风格。而gRPC则是一种基于HTTP/2协议的高性能、低延迟的RPC框架,非常适合用于构建微服务。什么是gRPC?gR......
  • Java 实践(Netbeans开发)——StringTokenizer实现数组分割
     引:StringTokenizer存在于java.util. StringTokenizer包中,是一个用来分隔String的应用类,相当于VB的split函数。1.构造函数publicStringTokenizer(Stringstr)publicStringTokenizer(Stringstr,Stringdelim)publicStringTokenizer(Stringstr,Stringdelim,boolean......
  • 微软Playwright开源自动化框架初探-安装和调试(java版)
    最近在研究部门的UI自动化框架(java+selenium+testNG+openCV等),发现在调试脚本时,需要先下载谷歌浏览器。无头/有头模式还需要代码区分。还有一个体验问题,程序启动太慢,从运行到浏览器启动,差不多需要30s左右,等得有点着急。  在知乎/CSDN中找到多篇文章推荐自动化测试利器-Playwrigh......
  • 【java】同步异步和多线程编程
    Java基本概念并发基于时间段内的,同时发生(处理多个任务的能力,时间段)存在同步和互斥的问题(任务之间的时序问题)同步:前一个处理的结果作为下一个处理的资源(互相之间有依赖)互斥:不能同时使用临界资源。解决时序问题的机制:锁,信号量,原子操作Java中的多线程机制并行(完全......
  • JAVA语言springboot框架实现的求职招聘管理系统
    技术架构技术框架:SpringBoot+FreeMarker+JPA+MySQL5.7运行环境:jdk8+IntelliJIDEA+maven3+宝塔面板宝塔部署教程回到IDEA,点击编辑器右侧maven图标,执行package,完成后就会在根目录里生成一个target目录,在里面会打包出一个jar文件。宝塔新建一个数据库,导入数据库文件......
  • 使用Java 锁机制实现多线程售票案例
    本文首发自「慕课网」,想了解更多IT干货内容,程序员圈内热闻,欢迎关注"慕课网"及“慕课网公众号”!作者:王军伟Tech|慕课网讲师1.前言本文主要是使用Java的锁机制对多线程售票案例进行实现。售票案例多数情况下主要关注多线程如何安全的减少库存,也就是剩余的票数,当票数为0时,停止......
  • JAVA语言开发springboot框架实现的自动化立体智慧仓库WMS
    技术架构技术框架:SpringBoot+layui+HTML+CSS+JS运行环境:jdk8+IntelliJIDEA+maven3+宝塔面板宝塔部署教程回到IDEA,点击编辑器右侧maven图标,执行package,完成后就会在根目录里生成一个target目录,在里面会打包出一个jar文件。宝塔新建一个数据库,导入数据库文件,数据......
  • 关于MySQL的JDBC Driver加载过程详解
    在使用JDBC时,都需要提前加载对应数据库的Driver类,MySQL为例:Class.forName("com.mysql.jdbc.Driver")但是不写这句代码也可以让 com.mysql.jdbc.Driver类成功加载,这就涉及到java.sql.DriverManager类了,先看一下代码:publicclassDriverManager{//注册驱动的集合priva......
  • 【Java基础】万字长文深入理解Java反射机制
    大家好,我是程序员青戈,一个被Bug耽误了才艺的程序员......