Gear S2 with sqlite

Gear S2 with sqlite

BY 25 May 2017 Native Application Development

hi,

is it possible to use sqlite in gear s2 or other gear devices?

currently I am using gear s2 with Tizen version 2.3.2.2

I got this “sample code” from forum, but it is not working in my gear s2. 

https://developer.tizen.org/ko/forums/native-application-development/complete-tutorial-sqlite-database-crud-operation-and-data-access-tizen-native-application?langredirect=1

do you have other sample code?

thanks

PS.

here is the code with some modification 

/*

    at the main app, service_app_crete function.

*/

 

bool service_app_create(void *data) {

 

    dlog_print(DLOG_DEBUG, LOG_TAG, “service_app_create start”);

    if (initdb() == SQLITE_OK) {

        int ret = insertMsgIntoDb(10, testtest);

 

        dlog_print(DLOG_DEBUG, LOG_TAG, “insertMsgIntoDb ret = %d”, ret);

 

        if (!ret) {

            dlog_print(DLOG_DEBUG, LOG_TAG, “insert successfully!”);

        } else {

            dlog_print(DLOG_ERROR, LOG_TAG, “Data insert error! %d”, ret);

        }

 

    }

 

    dlog_print(DLOG_DEBUG, LOG_TAG, “service_app_create end”);

    return true;

}

———————————–

sqlitedbhelper.c

———————————–

#include <string.h>

#include <sqlite3.h>

#include <stdint.h>

#include <stdlib.h>

#include <storage.h>

#include <app_common.h>

#include <sqlitedbhelper.h>

#include <stdio.h>

 

#define DB_NAME “database.db”

#define TABLE_NAME “MyDataTable”

#define COL_ID “QR_ID”

#define COL_DATA “QR_DATA”

#define COL_TYPE “QR_CODE”

#define COL_DATE “QR_DATE”

 

#define BUFLEN 500 /*assume buffer length for query string’s size.*/

 

 

#define VERIFY_SQLITE_OK(tag, arg, logLevel, retValue) do{ if (SQLITE_OK != (arg)) \

            { OC_LOG_V((logLevel), tag, (“Error in “ #arg “, Error Message: %s”), \

               sqlite3_errmsg(g_db)); return retValue; }}while(0)

 

 

sqlite3 *healthDataDb; /*name of database*/

int select_row_count = 0;

 

int opendb() {

    char * dataPath = app_get_data_path();

//    char * dataPath = “/opt/usr/media/Downloads/”;

    int size = strlen(dataPath) + 10;

 

    char * path = malloc(sizeof(char) * size);

 

    strcpy(path, dataPath);

    strncat(path, DB_NAME, size);

 

    dlog_print(DLOG_DEBUG, LOG_TAG,“DB Path = [%s]”, path);

 

    int ret = sqlite3_open_v2(path, &healthDataDb, SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE, NULL);

    dlog_print(DLOG_DEBUG, LOG_TAG, opendb ret = %d”,ret);

 

    if (ret != SQLITE_OK)

        dlog_print(DLOG_ERROR, LOG_TAG,“DB Create Error! [%s]”, sqlite3_errmsg(healthDataDb));

 

    free(dataPath);

    free(path);

    /*didn’t close database instance as this will be handled by caller e.g. insert, delete*/

    return ret;

}

 

int initdb() {

    if (opendb() != SQLITE_OK) /*create database instance*/

        return SQLITE_ERROR;

 

    int ret;

    char *ErrMsg;

    /*query preparation for table creation. it will not be created the table if it is exists already*/

    char *sql = “CREATE TABLE IF NOT EXISTS “

    TABLE_NAME” (“

    COL_DATA” TEXT NOT NULL, “

    COL_TYPE” INTEGER NOT NULL, “

    COL_DATE” TEXT NOT NULL, “

    COL_ID” INTEGER PRIMARY KEY AUTOINCREMENT);”; /*id autoincrement*/

 

    dlog_print(DLOG_DEBUG, LOG_TAG, “crate table query : %s”, sql);

 

    ret = sqlite3_exec(healthDataDb, sql, NULL, 0, &ErrMsg); /*execute query*/

    if (ret != SQLITE_OK) {

        dlog_print(DLOG_ERROR, LOG_TAG, “Table Create Error! [%s]”, ErrMsg);

        sqlite3_free(ErrMsg);

        sqlite3_close(healthDataDb); /*close db instance as instance is still open*/

 

        return SQLITE_ERROR;

    }

    dlog_print(DLOG_DEBUG, LOG_TAG, Db Table created successfully!”);

    sqlite3_close(healthDataDb); /*close the db instance as operation is done here*/

 

    return SQLITE_OK;

}

 

/*callback for insert operation*/

static int insertcb(void *NotUsed, int argc, char **argv, char **azColName) {

    int i;

    for (i = 0; i < argc; i++) {

        /*usually we do not need to do anything.*/

    }

    return 0;

}

 

int insertMsgIntoDb(int type, const char * msg_data) {

    if (opendb() != SQLITE_OK) /*create database instance*/

        return SQLITE_ERROR;

 

    char sqlbuff[BUFLEN];

    char *ErrMsg;

    int ret;

    /*read system date time using sqlite function*/

    char* dateTime = strftime(‘%Y-%m-%d  %H-%M’,’now’)”;

 

    /*prepare query for INSERT operation*/

    snprintf(sqlbuff, BUFLEN, “INSERT INTO “ TABLE_NAME ” VALUES(\’%s\’, %d, %s, NULL);”,    msg_data, type, dateTime);

    dlog_print(DLOG_DEBUG, LOG_TAG,“Insert query = [%s]”, sqlbuff);

 

    ret = sqlite3_exec(healthDataDb, sqlbuff, insertcb, 0, &ErrMsg); /*execute query*/

    if (ret != SQLITE_OK) {

        dlog_print(DLOG_ERROR, LOG_TAG,“Insertion Error! [%s]”, sqlite3_errmsg(healthDataDb));

        sqlite3_free(ErrMsg);

        sqlite3_close(healthDataDb); /*close db instance for failed case*/

 

        return SQLITE_ERROR;

    }

 

    sqlite3_close(healthDataDb); /*close db instance for success case*/

 

    return SQLITE_OK;

}

 

QueryData *qrydata;

 

/*this callback will be called for each row fetched from database. we need to handle retrieved elements for each row manually and store data for further use*/

static int selectAllItemcb(void *data, int argc, char **argv, char **azColName) {

    /*

     * SQLite queries return data in argv parameter as  character pointer */

    /*prepare a temporary structure*/

    QueryData *temp = (QueryData*) realloc(qrydata,

            ((select_row_count + 1) * sizeof(QueryData)));

 

    if (temp == NULL) {

        dlog_print(DLOG_ERROR, LOG_TAG,“Cannot reallocate memory for QueryData”);

        return SQLITE_ERROR;

    } else {

        /*store data into temp structure*/

        strcpy(temp[select_row_count].msg, argv[0]);

        temp[select_row_count].type = atoi(argv[1]);

        strcpy(temp[select_row_count].date, argv[2]);

//        temp[select_row_count].qr_id = atoi(argv[3]);

 

        /*copy temp structure into main sturct*/

        qrydata = temp;

    }

 

    select_row_count++; /*keep row count*/

 

    return SQLITE_OK;

}

 

int getAllMsgFromDb(QueryData **msg_data, int* num_of_rows) {

    if (opendb() != SQLITE_OK) /*create database instance*/

        return SQLITE_ERROR;

 

    qrydata = (QueryData *) calloc(1, sizeof(QueryData)); /*preparing local querydata struct*/

 

    char *sql = “SELECT * FROM “ TABLE_NAME ” ORDER BY QR_ID DESC”; /*select query*/

    int ret;

    char *ErrMsg;

    select_row_count = 0;

 

    ret = sqlite3_exec(healthDataDb, sql, selectAllItemcb, (void*) msg_data,

            &ErrMsg);

    if (ret != SQLITE_OK) {

        dlog_print(DLOG_DEBUG, LOG_TAG,“select query execution error [%s]”, ErrMsg);

        sqlite3_free(ErrMsg);

        sqlite3_close(healthDataDb); /*close db for failed case*/

 

        return SQLITE_ERROR;

    }

 

    /*assign all retrived values into caller’s pointer*/

    *msg_data = qrydata;

    *num_of_rows = select_row_count;

 

    dlog_print(DLOG_DEBUG, LOG_TAG,“select query execution success!”);

    sqlite3_close(healthDataDb); /*close db for success case*/

 

    return SQLITE_OK;

}

 

int getMsgById(QueryData **msg_data, int id) {

    if (opendb() != SQLITE_OK) /*create database instance*/

        return SQLITE_ERROR;

 

    qrydata = (QueryData *) calloc(1, sizeof(QueryData));

 

    char sql[BUFLEN];

    snprintf(sql, BUFLEN, “SELECT * FROM “ TABLE_NAME ” where QR_ID=%d;”, id);

 

    int ret = 0;

    char *ErrMsg;

 

    ret = sqlite3_exec(healthDataDb, sql, selectAllItemcb, (void*) msg_data,

            &ErrMsg);

    if (ret != SQLITE_OK) {

        dlog_print(DLOG_DEBUG, LOG_TAG,“select query execution error [%s]”, ErrMsg);

        sqlite3_free(ErrMsg);

        sqlite3_close(healthDataDb);

 

        return SQLITE_ERROR;

    }

 

    dlog_print(DLOG_DEBUG, LOG_TAG,“select query execution success!”);

 

    /*assign fetched data into caller’s struct*/

    *msg_data = qrydata;

 

    sqlite3_close(healthDataDb); /*close db*/

 

    return SQLITE_OK;

}

 

static int deletecb(void *data, int argc, char **argv, char **azColName) {

    int i;

    for (i = 0; i < argc; i++) {

        /*no need to do anything*/

    }

 

    return 0;

}

 

int deleteMsgById(int id) {

    if (opendb() != SQLITE_OK) /*create database instance*/

        return SQLITE_ERROR;

 

    char sql[BUFLEN];

    snprintf(sql, BUFLEN, “DELETE FROM “ TABLE_NAME ” QueryData where QR_ID=%d;”, id);

 

    int counter = 0, ret = 0;

    char *ErrMsg;

 

    ret = sqlite3_exec(healthDataDb, sql, deletecb, &counter, &ErrMsg);

    if (ret != SQLITE_OK) {

        dlog_print(DLOG_ERROR, LOG_TAG,“Delete Error! [%s]”, sqlite3_errmsg(healthDataDb));

        sqlite3_free(ErrMsg);

        sqlite3_close(healthDataDb);

 

        return SQLITE_ERROR;

    }

 

    sqlite3_close(healthDataDb);

 

    return SQLITE_OK;

}

 

int deleteMsgAll() {

    if (opendb() != SQLITE_OK) /*create database instance*/

        return SQLITE_ERROR;

 

    char sql[BUFLEN];

    snprintf(sql, BUFLEN, “DELETE FROM “ TABLE_NAME “;”);

 

    int counter = 0, ret = 0;

    char *ErrMsg;

 

    ret = sqlite3_exec(healthDataDb, sql, deletecb, &counter, &ErrMsg);

    if (ret != SQLITE_OK) {

        dlog_print(DLOG_ERROR, LOG_TAG,“Delete Error! [%s]”, sqlite3_errmsg(healthDataDb));

        sqlite3_free(ErrMsg);

        sqlite3_close(healthDataDb);

 

        return SQLITE_ERROR;

    }

 

    sqlite3_close(healthDataDb);

 

    return SQLITE_OK;

}

 

int g_row_count = 0;

 

static int row_count_cb(void *data, int argc, char **argv, char **azColName) {

    g_row_count = atoi(argv[0]); /*number of rows*/

 

    return 0;

}

int getTotalMsgItemsCount(int* num_of_rows) {

    if (opendb() != SQLITE_OK) /*create database instance*/

        return SQLITE_ERROR;

 

    char *sql = “SELECT COUNT(*) FROM “ TABLE_NAME “;”;

    char *ErrMsg;

 

    int ret = 0;

 

    ret = sqlite3_exec(healthDataDb, sql, row_count_cb, NULL, &ErrMsg);

    if (ret != SQLITE_OK) {

        dlog_print(DLOG_ERROR, LOG_TAG,“Count Error! [%s]”, sqlite3_errmsg(healthDataDb));

        sqlite3_free(ErrMsg);

        sqlite3_close(healthDataDb);

 

        return SQLITE_ERROR;

    }

 

    dlog_print(DLOG_DEBUG, LOG_TAG,“Total row found[%d]”, g_row_count);

 

    sqlite3_close(healthDataDb);

 

    *num_of_rows = g_row_count;

    g_row_count = 0;

    return SQLITE_OK;

}

 

Written by