sqlite庫學習(7)sqlite讀取

下載地址:https://download.csdn.net/download/no2101/12428235。

1、sqlite3_exec

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

    int i;

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

        printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");

    }

    printf(" %s \n", (char*)NotUsed);

    return 0;

}





void DB_Select_table_test1(sqlite3 *db)

{

    char *zErrMsg = 0;

    int rc;

    char *sql;

    const char* data = "select_callback function called";

    sql = "SELECT * from TESTTABLE";



    /* Execute SQL statement */

    rc = sqlite3_exec(db, sql, select_callback, (void*)data, &zErrMsg);

    if (rc != SQLITE_OK) {

        printf("SQL error: %s\n", zErrMsg);

        sqlite3_free(zErrMsg);

    }

    else {

        printf("sqlite3_exec select done successfully\n");

    }

}

需要callback

2、sqlite3_get_table

void DB_Select_table_test2(sqlite3 *db)

{

    char *errmsg = NULL;

    char** dbResult = NULL;

    char *sql = "SELECT * from TESTTABLE";

    int nRow, nColumn;

    int result = sqlite3_get_table(db, sql, &dbResult, &nRow, &nColumn, &errmsg);



    //查詢成功 

    int index = nColumn; //dbResult 前面第一行數據是字段名稱,從 nColumn 索引開始纔是真正的數據 



    for (int i = 0; i < nRow; i++)

    {

        for (int j = 0; j < nColumn; j++)

        {

            printf("字段名:%s 字段值:%s  長度:%d\n", dbResult[j], dbResult[index], strlen(dbResult[index]));

            ++index; // dbResult 的字段值是連續的,從第0索引到第 nColumn - 1索引都是字段名稱,從第 nColumn 索引開始,後面都是字段值,它把一個二維的表(傳統的行列表示法)用一個扁平的形式來表示 

        }

        printf("\n");

    }

    sqlite3_free_table(dbResult);//釋放查詢空間 

    printf("sqlite3_get_table select done successfully\n");

}

速度比較慢,不建議使用。

3、sqlite3_prepare_v2

void DB_Select_table_test3(sqlite3 *db)

{

    char *sql = "SELECT * from TESTTABLE;";

    sqlite3_stmt * stmt3 = NULL;

    if (sqlite3_prepare_v2(db, sql, strlen(sql), &stmt3, NULL) != SQLITE_OK)

    {

         if (stmt3)

             sqlite3_finalize(stmt3);

         sqlite3_close(db);

         return;

    }

    int fieldCount = sqlite3_column_count(stmt3);//stmt3返回的是查詢結果集

    do

    {

         int r = sqlite3_step(stmt3);

         if (r == SQLITE_ROW) {

             for (int i = 0; i < fieldCount; ++i) {

                  int vtype = sqlite3_column_type(stmt3, i);//字段類型獲取

                  //const char* dtype = sqlite3_column_decltype(stmt3, i);//INT  REAL之類



                  const char* otype = sqlite3_column_origin_name(stmt3, i);//申明

                  printf("%s ", otype);



                  //判斷當前記錄當前字段的類型,根據返回的類型使用不同的API函數

                  //獲取實際的數據值                                      

                  if (vtype == SQLITE_INTEGER) {

                      int v = sqlite3_column_int(stmt3, i);

                      printf("is %d.\n", v);

                  }

                  else if (vtype == SQLITE_FLOAT) {

                      double v = sqlite3_column_double(stmt3, i);

                      printf("is %f.\n", v);

                  }

                  else if (vtype == SQLITE_TEXT) {

                      const char* v = (const char*)sqlite3_column_text(stmt3, i);

                      printf("is %s.\n", v);

                  }

                  else if (vtype == SQLITE_NULL) {

                      printf("is NULL.\n");

                  }

             }

         }

         else if (r == SQLITE_DONE) {

             printf("finish successfully\n");

             break;

         }

         else {

             printf("Failed to SELECT.\n");

             sqlite3_finalize(stmt3);

             sqlite3_close(db);

             return;

         }

         printf("\n");

    } while (true);

    printf("sqlite3_prepare_v2 select done successfully\n");

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章