【发布时间】:2016-07-27 12:18:01
【问题描述】:
有谁知道是否可以在 intellij 的 sqlite 数据库上执行空间函数? 空间函数参考: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 我该如何使用它们?以前有人做过吗?
【问题讨论】:
-
你是不是直接尝试了?
-
这些是数据库功能吗?是什么阻止您像调用其他函数一样调用它们?
-
IDE 与此有什么关系?
-
是的,我试过没有成功。函数在 spatialite-gui 中起作用,但在 intellij 中不起作用。我会更新问题。
标签: java sqlite intellij-idea intellij-14 spatialite