• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • sqlite庫學習(7)sqlite讀取

    標簽: sqlite  C語言  源代碼  數據庫  

    下載地址: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");
    
    }
    
    

     

    版權聲明:本文為no2101原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/no2101/article/details/106164650

    智能推薦

    sqlite學習(1)編譯sqlite

      Sqlite數據庫簡介 SQLite是一款輕型的數據庫,是遵守ACID的關系型數據庫管理系統。 它很小,只有sqlite3.h、sqlite3ext.h、sqlite3.c三個C語言文件。它的設計目標是嵌入式的,而且目前已經在很多嵌入式產品中使用了它,它占用資源非常的低,在嵌入式設備中,可能只需要幾百K的內存就夠了。它能夠支持Windows/Linux/Unix等等主流的操作系統,我...

    android學習筆記----SQLite數據庫

        目錄 用SQLite語句執行: 利用SQLiteDatabase中自帶的增刪改查操作: SQLite數據庫的事務介紹: 目錄一二的增刪改查源碼地址:https://github.com/liuchenyang0515/CreateDB3 目錄三事務介紹的源碼地址:https://github.com/liuchenyang0515/BankTransfer  ...

    《Java》《SQLite》Java讀取SQLite數據庫中的表

    用Java讀出數據庫中表的內容     SQLite數據庫的連接、SQLite數據庫建表在我的博客中已經詳細介紹。     在成功建立Java與SQLite數據庫的連接后,便可以查詢、操作數據庫中的表,主要用到JDBC中的三個接口,分別是Connection接口、Statement接口、ResultSet接口。 Con...

    c# WinForm 讀取SQLite數據庫中信息

    參考網址: https://www.cnblogs.com/nsky/p/4479850.html 1、新建WinForm項目,創建Button 2、右鍵解決方案資源管理器——管理NuGet程序包——搜索sqlite,下載System.Data.SQLite(x86/x64)——下載后AppConfig內容為&mda...

    Sqlite 數據庫:

    1.1 SQL 語法: http://www.w3school.com.cn/sql/ SQL 語句對大小寫不敏感。 表名稱 mytable , 列: id name iage 1.1.1 SELECT - 從數據庫表中獲取數據 SELECT 列名稱 FROM 表名稱 SELECT * FROM 表名稱 的信息 SELECT 列名稱 FROM 表名稱 WHERE 列 運算符 值 下面的運算符可在 ...

    猜你喜歡

    數據庫SQLite

    數據庫SQLite 了解最輕巧的數據庫SQLite SQLite,是一款輕型的數據庫,占用資源非常低,它的源代碼不受版權限制,能夠支持Windows/Linux/Unix等等主流的操作系統,同時能夠跟很多程序語言相結合,比如 Tcl、C#、PHP、Java等,還有ODBC接口,同樣比起Mysql、PostgreSQL這兩款開源的世界著名數據庫管理系統來講,它的處理速度比他們都快。SQLite的最新...

    SQLite數據庫

    1.SQLite數據庫簡介 SQLite 是一個開源的、內嵌式的關系型數據庫,第一個版本誕生于 2000 年 5 月,目前最高版本為 SQLite3。 學習網站:http://www.runoob.com/sqlite/sqlite-tutorial.html 安裝方法:( 我用的是ubuntu12.04) 字符界面: 圖形界面: SQLite 特性: 零配置 、靈活、可移植、自由的授權、緊湊、可...

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    精品国产乱码久久久久久蜜桃不卡