【问题标题】:Add SQLite to Android NDK project将 SQLite 添加到 Android NDK 项目
【发布时间】:2017-05-29 18:00:05
【问题描述】:

我是 android 开发人员,但是是 android ndk 的新手,现在我正在尝试通过 android ndk 使用 c++ 编写一个应用程序,并且所有使用数据库的工作也应该使用 c++ 代码完成。我将 sqlite 添加到项目中(我不确定我是否正确执行):我将这四个文件(shell.c、sqlite3.c、sqlite3.h、slite3ext.h)下载并保存到 src/main/cpp/ sqlite 文件夹。这是我的 CMakeList.txt,我在其中将 sqlite 添加到项目中:

add_library(native-lib

             SHARED

             src/main/cpp/native-lib.cpp
             src/main/cpp/sqlite/sqlite3.c
             )

我做对了吗?以及如何在代码中使用它(连接数据库、创建表、插入数据、更新数据...)?

【问题讨论】:

    标签: android c++ sqlite android-ndk


    【解决方案1】:

    您的项目中需要有这 3 个文件:sqlite3.csqlite3.hsqlite3ext.h(不确定最后一个)。基本操作(创建数据库、创建表和插入值):

    bool createTable() {
    
        /* Open database */
        sqlite3 *db;
        char *zErrMsg = 0;
        int rc;
        rc = sqlite3_open(databaseName, &db);
        if (rc != SQLITE_OK) {
            //Can't open database/
            sqlite3_open_v2(DB_FILE, &db, SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE, NULL);
        }
    
        /* Create SQL statement */
        const char *createQuery =
                "CREATE TABLE IF NOT EXISTS cities (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT);";
    
        /* Execute SQL statement */
        rc = sqlite3_exec(db, createQuery, callback, 0, &zErrMsg);
    
        if (rc != SQLITE_OK) {
            sqlite3_free(zErrMsg);
            return false;
        }
        sqlite3_close(db);
        return true;
    }
    

    插入:

    bool insertToDb(CityWeather *pCityWeather) {
        sqlite3 *db;
        char *zErrMsg = 0;
        int rc;
    
        /* Open database */
        rc = sqlite3_open(databaseName, &db);
        if (rc) {
            sqlite3_open_v2(DB_FILE, &db, SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE, NULL);
        }
    
        const char *pCityName = pCityWeather->getName().c_str();
        char insertQuery[50];
        strcpy (insertQuery,"INSERT INTO cities (name) VALUES ('");
        strcat (insertQuery, pCityName);
        strcat (insertQuery, "');");
        puts (insertQuery);
    
        delete pCityWeather;
    
        /* Execute SQL statement */
        rc = sqlite3_exec(db, insertQuery, callback, 0, &zErrMsg);
        if (rc != SQLITE_OK) {
            sqlite3_free(zErrMsg);
        }
        sqlite3_close(db);
        return true;
    }
    

    【讨论】:

      猜你喜欢
      • 2016-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-25
      • 2021-10-30
      • 1970-01-01
      • 1970-01-01
      • 2021-02-06
      相关资源
      最近更新 更多