2011-05-26 39 views

回答

2

你可以絕對編譯自己的SQLite版本。我們這樣做是爲了從wxSQLite啓用加密/編解碼器模塊。查看Android Git存儲庫中的SQLite源代碼。基本上,它很容易,並創建一個Android.mk與你想要啓用的選項(如SQLITE_ENABLE_RTREE)。當然,這會給你一個本地圖書館。爲了使用它,您需要從NDK訪問它或創建一個包裝器(再次,您可以查看Android存儲庫和Java/JNI包裝到SQLite)

+0

這是我落得這樣做,但它仍然看起來很傻有每個用戶的設備 – 2011-06-02 10:41:45

+0

我要問...這裏做同樣的事情上安裝了兩次SQlite的。在那裏建立了sqlite3本地沒有問題。你有任何指向SQLite的JNI包裝的鏈接?我有點希望不必從頭開始寫封裝。 – George 2011-12-14 15:13:58

+0

@George:我們在我們的本地代碼中使用SQLite和C++包裝器,而不是直接從Java - > JNI,抱歉。 – NuSkooler 2011-12-15 22:06:03

1

這適用於我,從Android中提取。 mk文件。它是用於空間,sqlite空間的擴展。

include $(CLEAR_VARS) 
# -DOMIT_GEOS=0 
# ./configure --build=x86_64-pc-linux-gnu --host=arm-linux-eabi 
LOCAL_MODULE := spatialite 
LOCAL_CFLAGS := -D__ANDROID__ -Dfdatasync=fsync -DOMIT_GEOCALLBACKS -DSQLITE_ENABLE_RTREE 
LOCAL_LDLIBS := -llog 
LOCAL_C_INCLUDES := \ 
    libiconv-1.13.1/include \ 
    libiconv-1.13.1/libcharset/include \ 
    geos-3.2.2/source/headers \ 
    geos-3.2.2/capi \ 
    proj-4.6.1/src 
LOCAL_SRC_FILES := \ 
    ./libspatialite-amalgamation-2.4.0/spatialite.c \ 
    ./libspatialite-amalgamation-2.4.0/empty.cpp \ 
    ./libspatialite-amalgamation-2.4.0/sqlite3.c 
LOCAL_STATIC_LIBRARIES := iconv proj geos 
include $(BUILD_STATIC_LIBRARY) 
1

https://www.sqlite.org/android/doc/trunk/www/index.wiki給出完全回答你的問題,幷包含了一步一步的指導,安裝的SQLite與NDK/JNI應用程序。

請注意,您必須在文檔中建議的jni/sqlite/Android.mk文件中添加LOCAL_CFLAGS += -DSQLITE_ENABLE_RTREE,以便在啓用R-Tree模塊的情況下進行編譯。

不要忘記更新導入或使用默認的SQLite數據庫。

0

2017年六月

  1. 轉到:download page和搶的sqlite-Android的xxxxx.aar
  2. 重命名爲.aar代替.ZIP
  3. 創建了Android工作室一個簡單的項目(沒有需要C++支持)
  4. 在項目樹中右鍵點擊app/new/Module選擇導入.JAR/.AAR包
  5. 選擇重命名的文件,點擊完成
  6. 在Android Studio中進入菜單:文件/項目結構。單擊應用程序(在模塊下),選擇依賴項標籤,添加模塊依賴項SQLite-android-xxxxx
  7. 在使用任何SQLite函數之前,請調用:System.loadLibrary(「sqliteX」);
  8. 將SQlite導入替換爲org.sqlite.database.sqlite。XXXXXX
  9. 在的onCreate你可以用一個內存數據庫快速測試:

    System.loadLibrary("sqliteX"); 
    
    // get the SQLite version 
    String query = "select sqlite_version() AS sqlite_version"; 
    SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(":memory:", null); 
    Cursor cursor = db.rawQuery(query, null); 
    String sqliteVersion = ""; 
    if (cursor.moveToNext()) { 
        sqliteVersion = cursor.getString(0); 
    } 
    
    // do some R*Tree things (this will fail for the standard SQLite) 
    db.execSQL("CREATE VIRTUAL TABLE demo_index USING rtree(id, minX, maxX, minY, maxY);"); 
    db.execSQL("INSERT INTO demo_index VALUES(1,-80.7749, -80.7747, 35.3776, 35.3778);"); 
    db.execSQL("INSERT INTO demo_index VALUES(2,-81.0, -79.6, 35.0, 36.2);"); 
    
    cursor = db.rawQuery("SELECT id FROM demo_index WHERE minX>=-81.08 AND maxX<=-80.58 AND minY>=35.00 AND maxY<=35.44;", null); 
    
    int id = -1; 
    if (cursor.moveToFirst()) { 
        do { 
         id = cursor.getInt(0); 
        } while (cursor.moveToNext()); 
    } 
    db.close(); 
    

的鏈接(以上所有):