1. 程式人生 > >C語言實現sqlite3資料庫查詢的基本方法

C語言實現sqlite3資料庫查詢的基本方法

sqlite回傳函式相關 說了3種基本方法:callback,gettable和預處理stmt方法

下面給出測試程式碼和測試用資料庫,程式碼如下

  1. #include <stdio.h> 
  2. #include <stdlib.h> 
  3. #include <string.h>
  4. #include "sqlite3.h" 
  5. //
  6. //typedef int (*sqlite3_callback)( 
  7. //    void* data,       /* Data provided in the 4th argument of sqlite3_exec() */ 
  8. //    int ncols,        /* The number of columns in row */ 
  9. //    char** values,    /* An array of strings representing fields in the row */ 
  10. //    char** headers    /* An array of strings representing column names */ 
  11. //); 
  12. int callback(void* data, int ncols, char** values, char** headers)  
  13. {  
  14.     int i;  
  15.     int len =0;  
  16.     int ll=0;  
  17.     for(i=0; i < ncols; i++)  
  18.     {  
  19.         if(strlen(headers[i])>len)  
  20.             len = strlen(headers[i]);  
  21.     }  
  22.     for(i=0; i < ncols; i++)   
  23.     {  
  24.         ll = len-strlen(headers[i]);  
  25.         while(ll)  
  26.         {  
  27.             fprintf(stdout," "
    );  
  28.             --ll;  
  29.         }  
  30.         fprintf(stdout, "%s: %s\n", headers[i], values[i]);  
  31.     }  
  32.     fprintf(stdout, "\n");  
  33.     return 0;  
  34. }  
  35. int search_by_callback(constchar* db_name, constchar* sql_cmd)   
  36. {    
  37.     int i = 0 ;    
  38.     int j = 0 ;    
  39.     int nrow = 0, ncolumn = 0;    
  40.     char **azResult; //二維陣列存放結果  
  41.     sqlite3 *db=NULL;    
  42.     char *zErrMsg = 0;   
  43.     int rc;  
  44.     int len=0;  
  45.     if(access(db_name, 0) == -1)  
  46.     {  
  47.         fprintf(stderr, "%s not found\n", db_name);    
  48.         return -1;    
  49.     }  
  50.     rc = sqlite3_open(db_name, &db);  
  51.     if( rc != SQLITE_OK)  
  52.     {    
  53.         fprintf(stderr, "%s open failed: %s\n", db_name,sqlite3_errmsg(db));    
  54.         sqlite3_close(db);    
  55.         return -1;    
  56.     }    
  57.     //查詢資料  
  58.     rc = sqlite3_exec( db,sql_cmd, callback, NULL, &zErrMsg );  
  59.     if( rc != SQLITE_OK)  
  60.     {    
  61.         fprintf(stderr, "%s %s: %s\n", db_name,sql_cmd, sqlite3_errmsg(db));    
  62.         if(zErrMsg)  
  63.         {  
  64.             fprintf(stderr,"ErrMsg = %s \n", zErrMsg);   
  65.             sqlite3_free(zErrMsg);  
  66.         }  
  67.         sqlite3_close(db);    
  68.         return -1;    
  69.     }  
  70.     if(zErrMsg)  
  71.     {  
  72.         sqlite3_free(zErrMsg);  
  73.     }  
  74.     //關閉資料庫  
  75.     sqlite3_close(db);   
  76.     return 0;    
  77. }  
  78. int search_by_table(constchar* db_name, constchar* sql_cmd)   
  79. {    
  80.     int i = 0 ;    
  81.     int j = 0 ;    
  82.     int nrow = 0, ncolumn = 0;    
  83.     char **azResult; //二維陣列存放結果  
  84.     sqlite3 *db=NULL;    
  85.     char *zErrMsg = 0;   
  86.     int rc;  
  87.     int len=0;  
  88.     if(access(db_name, 0) == -1)  
  89.     {  
  90.         fprintf(stderr, "%s not found\n", db_name);    
  91.         return -1;    
  92.     }  
  93.     rc = sqlite3_open(db_name, &db);  
  94.     if( rc != SQLITE_OK)  
  95.     {    
  96.         fprintf(stderr, "%s open failed: %s\n", db_name,sqlite3_errmsg(db));    
  97.         sqlite3_close(db);    
  98.         return -1;    
  99.     }    
  100.     //查詢資料  
  101.     rc = sqlite3_get_table( db , sql_cmd, &azResult , &nrow , &ncolumn , &zErrMsg );    
  102.     if( rc != SQLITE_OK)  
  103.     {    
  104.         fprintf(stderr, "%s %s: %s\n", db_name,sql_cmd, sqlite3_errmsg(db));    
  105.         if(zErrMsg)  
  106.             fprintf(stderr,"ErrMsg = %s \n", zErrMsg);   
  107.         sqlite3_free_table( azResult );   
  108.         sqlite3_close(db);    
  109.         return -1;    
  110.     }    
  111.     for(j=0; j < ncolumn; j++)  
  112. 相關推薦

    C語言實現sqlite3資料庫查詢基本方法

    sqlite回傳函式相關 說了3種基本方法:callback,gettable和預處理stmt方法 下面給出測試程式碼和測試用資料庫,程式碼如下 #include <stdio.h>  #include <stdlib.h>

    C語言實現二叉查詢樹(BST)的基本操作

         我們在上一篇部落格中講解了二叉樹,這一次我們來實現二叉樹的進階——二叉查詢樹(Binary Search Tree),又稱二插排序樹(Binary Sort Tree)。所以簡稱為BST。二插查詢樹的定義如下:1.若左子樹不為空,則左子樹上所有節點的值均小於它的根節

    使用C語言實現CRC校驗的方法

    CRC(Cyclic Redundancy Check)校驗應用較為廣泛,以前為了處理簡單,在程式中大多數採用LRC(Longitudinal Redundancy Check)校驗,LRC校驗很好理解,程式設計實現簡單。用了一天時間研究了CRC的C語言實現,理解和掌握了基本原理和C語言程式設計。結合自己

    c語言實現順序棧的基本功能

    #include<stdio.h> #include<stdlib.h> #define maxsize 100 typedef struct SqStack{ int data[maxsize]; int top; }SqStack,*pSqStac

    抽象性設計——用C語言實現B樹的基本操作

    這次做的是資料結構的一個抽象性實驗,我選擇的是B樹的基本操作。 編譯環境是:VS 2015 BTree.h #include<stdio.h> #include<stdlib.h> #include<time.h> #defi

    C語言實現順序棧的基本操作

    //標頭檔案內容//--------------------棧的順序儲存結構-------------------- #define STACK_INIT_SIZE 100 #define STACKINCREACE 10 typedef int Elemtype;//在

    linux 環境下 c語言實現mysql資料庫圖片的儲存以及多資料庫直接的轉存

    作為一個程式設計師,CSDN對我的程式設計帶來了很多幫助和提高,在這裡可以讓你找到很多開發過程中遇到的問題的解決辦法,今天也寫點自己積累的東西跟大家分享一下,希望對需要的人有幫助. 資料背景:         之前專案一直使用Oracle資料,最近換工作,公司使用的為

    C語言實現順序表的基本操作

    1.定義 線性表的順序儲存是指在記憶體中用一組地址連續的儲存單元依次儲存線性表的各元素,用這種儲存形式儲存的線性表稱為順序表。也就是說,順序表以資料元素在計算機內的物理位置相鄰來表示資料元素線上性表中的邏輯相鄰關係。 2.線性表的順序儲存示意圖

    利用C語言實現計算機影象處理的方法

    1.影象平移   影象平移只是改變影象在螢幕上的位置,影象本身並不發生變化。   假設原影象區域左上角座標為(x0, y0),右下角座標為(x1, y1),將影象分別沿x和y軸平移dx和dy,則新影象的左上角座標為(x0 + dx, y0 + dy),右下角座標為(x1 + dx, y1 + dy)。座標平

    C語言實現鏈佇列的基本操作

    //標頭檔案內容 *************************************************鏈佇列.h******************************************************* #include<stdio.

    B樹之C語言實現(包括查詢、刪除、插入)

    我在大二上學期的資料結構實驗設計中選擇了B樹這個題目,該B樹的資料結構實現採用了C語言。趁現在寒假整理完寫一篇博文記錄我的學習。文末提供了專案原始碼的地址。 B樹的定義 一棵m階B樹(Balanced Tree of order m),或為空樹,

    C語言實現二叉查詢樹的輸出

    二叉樹是資料結構和演算法中的重要部分。本文將簡單介紹其中的一類——二叉查詢樹:         二叉排序樹(BinarySortTree),又稱二叉查詢樹、二叉搜尋樹。它或者是一棵空樹;或者是具有下列

    c語言實現連結串列及其基本操作

    介紹        連結串列是一種物理儲存單元上非連續、非順序的儲存結構,資料元素的邏輯順序是通過連結串列中的指標連結次序實現的。連結串列由一系列結點(連結串列中每一個元素稱為結點)組成,結點可以在執

    [C語言實現]實現二叉查詢基本操作(遞迴版,圖示)

    定義 二叉查詢樹是一種特殊的二叉樹,它不僅是一顆二叉樹,還滿足如下性質 對於任何非葉子節點,他的左節點都小於它本身,而右節點都大於其本身. 它的左右子樹也分別而二叉搜尋樹 一般情況下,在這麼一棵樹中進行查詢,它的時間複雜度是 longnlon

    C語言實現線性表基本操作

    style eal struct fine fin delete class logs destroy #include <stdio.h> #include <tchar.h> #include <stdlib.h> #define

    c語言實現基本的數據結構(六) 串

    null cat ret pri include tchar 取字符 文件 子字符串 #include <stdio.h> #include <tchar.h> #include <stdlib.h> // TODO: 在此處引用

    統計字符串單詞數的兩種方法(c語言實現)

    字符串長度 字符 include ++ hit you 問題 code bool  問題描述:統計一個字符串,字符串由單詞,空格構成。  思路:   一,遍歷字符串所有字符,設置一個布爾變量來判斷當前是空格還是字母      1 #include <stdio

    [日常練習] 4. 基於交換兩整形變數值的三種方法C語言實現

    當面試題遇到:交換兩整形變數的值。你是感到無比的“慶幸”遇到這麼簡單的面試題,還是有一點“慌張”,怕是自己想的太簡單了吧!今天我們就來處理幾道小題,並且深入探討一下交換兩整形的3種C語言實現方法!當你再遇到這種問題的時候,你將一點都不慌!你,穩得一批! 練習題目: 1. 給定兩個整形

    C語言實現串列埠通訊知識點整理(一)】執行緒、開啟串列埠、設定波特率、設定校驗位、互斥鎖等實現基本的通訊

      部分程式碼借鑑地址:https://blog.csdn.net/wangqingchuan92/article/details/73497354/ 謝謝! 1.建立執行緒線上程內進行串列埠之間的收發 void CREAT_pthread(void) { pthr

    C語言實現householder變換(數值計算方法課程設計)

    博主系某985資訊與計算科學大三,剛除錯成功,分享給正在學習數值計算的夥伴們,有問題還請大家批評指正。  #include <stdio.h> #include <stdlib.h> #include <math.h> #define N 100 s