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/
转载文章受原作者版权保护。转载请注明原作者出处!