springboot项目连接 SpatiaLite spatialite-jdbc spatialite4-jdbc的简单使用和优化

spatialite 是sqlite的空间扩展,spatialite-jdbc 是java驱动

由于项目需要,临时接触了一下spatialite,网上示例太少,遇到一些问题,现在简单整理一下用法和问题。

1.1 安装jar包

使用版本为 ,目前maven没有资源,因此需要手动导入,执行maven命令

mvn install:install-file -Dfile=C:\Users\test\Desktop\spatialite-jdbc-4.3.0a.jar -DgroupId=org.hdm -DartifactId=spatialite-jdbc -Dversion=4.3.0a -Dpackaging=jar

pom中引用

<dependency>
    <groupId>org.hdmgroupId>
    <artifactId>spatialite-jdbcartifactId>
    <version>4.3.0aversion>
dependency>

1.2 初始化,参照githup示例

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class Spatialite
{
    public static Connection getConnection(Properties prop) throws SQLException {
       String property = System.getProperty("java.io.tmpdir");

       return  DriverManager.getConnection("jdbc:spatialite:/" + property + "/template.db", prop)
    }

    public static void main(String[] args)
    {
        Properties prop = new Properties();
        prop.setProperty("enable_shared_cache", "true");

        prop.setProperty("enable_load_extension", "true");

        prop.setProperty("enable_spatialite", "true");

        Connection conn = null;
        try {
            conn = getConnection(prop);
            Statement stat = conn.createStatement();

            stat.execute("SELECT InitSpatialMetaData(1)");
            stat.close();

            if (conn != null)
                conn.close();
        }
        catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

1.3 遇到问题

原因是使用了 executeBatch 执行,而不是使用 executeQuery 执行
添加字段sql是:
SELECT AddGeometryColumn(‘PointTable’, ‘Geometry’, 4326, ‘POINT’, ‘XY’);
实际是执行查询操作, 因此用execute不起作用,改为executeQuery即可

原因是执行 InitSpatialMetaData 的时候调用无参函数,改为使用传参1即可。
具体原因未知,大概是初始化空间元数据太多导致。


stat.execute("SELECT InitSpatialMetaData(1)");

最后,经同事指点,建议使用 ThreadLocal 管理数据源和数据库文件。

Original: https://blog.csdn.net/linzi19900517/article/details/120054028
Author: 非科班Java出身GISer
Title: springboot项目连接 SpatiaLite spatialite-jdbc spatialite4-jdbc的简单使用和优化

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/816518/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球