2017-01-14 5 views
1

Я разработчик Android, но новичок в android ndk, прямо сейчас Я пытаюсь написать приложение с помощью C++ через android ndk, и вся работа с базой данных должна выполняться также с кодом C++. Я добавил sqlite в проект (я не уверен, что я делаю это правильно): я загрузил и сохранил эти четыре файла (shell.c, sqlite3.c, sqlite3.h, slite3ext.h) в src/main/cpp/sqlite. Вот мой CMakeList.txt, где я добавляю sqlite к проекту:Добавить SQLite в Android NDK project

add_library(native-lib 

      SHARED 

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

Я правильно? И как я могу использовать его в коде (подключиться к db, создать таблицу, вставить данные, обновить данные ...)?

ответ

1

Необходимо, чтобы эти 3 файлов в вашем проекте: sqlite3.c, sqlite3.h, sqlite3ext.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; 
}