有人知道在intellij中是否可以在sqlite数据库上执行spatialite函数吗?空间函数的引用:http://www.gaia-gis.it/gaia-sins/spatialite-sql-4.2.0.html
特别是,我会对在类型Point上使用函数感兴趣。
谢谢!
编辑:函数确实在官方的spatialite gui中工作,但我认为没有一种方法可以通过编程方式使用spatialite gui,是吗?
以下是我迄今为止所做的尝试:在intellij中,我连接了Java JDBC库,并尝试使用函数ST_X(point)和ST_Y(point),但没有成功:
Connection c = null;
Class.forName("org.sqlite.JDBC");
c = DriverManager.getConnection("jdbc:sqlite:" + path + databaseName);
c.setAutoCommit(false);
System.out.println("Opened database "" + databaseName + "" successfully");
String sql = "SELECT id, ST_Y(point), ST_X(point) from tablename;";
Statement stmt = c.createStatement();
ResultSet rs = stmt.executeQuery(sql);
while ( rs.next() ) {
String msg = "Id: ";
msg += rs.getInt(1);
msg += " , Latitude: ";
msg += rs.getDouble(2);
msg += " , Longitude: ";
msg += rs.getDouble(3);
System.out.println(msg);
}
rs.close();
stmt.close();
c.close();
这引发以下异常:
Exception in thread "main" java.sql.SQLException: [SQLITE_ERROR] SQL error or missing database (no such function: ST_Y)
at org.sqlite.core.DB.newSQLException(DB.java:890)
at org.sqlite.core.DB.newSQLException(DB.java:901)
at org.sqlite.core.DB.throwex(DB.java:868)
at org.sqlite.core.NativeDB.prepare(Native Method)
at org.sqlite.core.DB.prepare(DB.java:211)
at org.sqlite.jdbc3.JDBC3Statement.executeQuery(JDBC3Statement.java:81)
at com.company.Test.main(Test.java:77)
编辑2:我迷路了。似乎我需要加载扩展才能使其工作。JDBC连接器中是否未包含此项?(我通过Maven拔出JDBC连接器。)在哪里可以找到正确的扩展?就是这些吗?https://www.gaia-gis.it/fossil/libspatialite/index还是那些?http://www.gaia-gis.it/gaia-sins/index.html我该如何使用它们?以前有人这样做过吗?
在执行空间查询之前,您需要加载执行的spatialite模块
SELECT load_extension('mod_spatialite');
您可以在这里找到文档:动态加载SpatiaLite作为扩展模块。
请注意,要加载的模块必须位于系统路径(文档)上,路径分隔符必须为/
。还要考虑到spatialite模块和Java必须是兼容的(都是32位或64位)。