Sqlite:在Intellij中执行Spatialite函数

时间:2016-07-27 12:18:02

标签: java sqlite intellij-idea intellij-14 spatialite

有没有人知道是否可以在intellij中的sqlite-databases上执行spatialite函数? 空间函数的参考:http://www.gaia-gis.it/gaia-sins/spatialite-sql-4.2.0.html

特别是,我对使用Point类型的函数感兴趣。

谢谢!

编辑:功能在官方空间网站中起作用,但我不认为有一种方法可以通过编程方式使用spaceite-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  我该如何使用它们?有没有人这样做过?

1 个答案:

答案 0 :(得分:0)

在执行空间查询之前,您需要加载空间实体模块

SELECT load_extension('mod_spatialite');

您可以在此处找到文档:Dynamically loading SpatiaLite as an extension module

请注意,要加载的模块必须位于系统路径(documentation)上,路径分隔符必须为/。还要考虑到spatialite模块和Java必须兼容(32位或64位)。