2016-07-27 19 views
2

有誰知道是否可以在intellij上的sqlite-databases上執行空間函數? 參考的spatialite功能:http://www.gaia-gis.it/gaia-sins/spatialite-sql-4.2.0.htmlSqlite:在Intellij中執行Spatialite函數

我特別有興趣使用的類型點的功能。

謝謝!

編輯:函數可以在官方的spatialite-gui中工作,但我認爲沒有辦法以編程方式使用spatialite-gui,是嗎?

這裏是我試過至今:在的IntelliJ我連接了Java JDBC庫,並使用功能ST_X(點)和ST_Y(點),但沒有成功嘗試:

 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 我該如何使用它們?有沒有人做過?

+0

你剛剛開始嘗試嗎? – Fildor

+0

這些數據庫功能?什麼阻止你像任何其他功能一樣稱呼他們? –

+0

IDE用這個做什麼? –

回答

0

之前進行空間查詢您需要加載spatialite模塊做

SELECT load_extension('mod_spatialite'); 

你可以在這裏找到的文檔:Dynamically loading SpatiaLite as an extension module

請注意,要加載的模塊必須位於系統路徑(documentation)上且路徑分隔符必須爲/。還要考慮到,spatialite模塊和Java必須兼容(32位或64位)。

+0

謝謝,它工作! – user3116232