2011-05-26 55 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(); 
    

的链接(以上所有):