1. <var id="fe6gj"></var>

    <rp id="fe6gj"><nav id="fe6gj"></nav></rp>

    <noframes id="fe6gj"><cite id="fe6gj"></cite>

    <ins id="fe6gj"><button id="fe6gj"><p id="fe6gj"></p></button></ins>
    1. <tt id="fe6gj"><i id="fe6gj"><sub id="fe6gj"></sub></i></tt>
        始創于2000年 股票代碼:831685
        咨詢熱線:0371-60135900 注冊有禮 登錄
        • 掛牌上市企業
        • 60秒人工響應
        • 99.99%連通率
        • 7*24h人工
        • 故障100倍補償
        您的位置: 網站首頁 > 幫助中心>文章內容

        SQLite的C語言接口

        發布時間:  2012/9/3 17:14:55

        近我正在Linux平臺寫一個軟件,需要用到一個簡單的數據庫。mysql做數據庫固然很好,但其數據是存放在服務器的。我想要的基本功能也就是使用C程序創建一個數據庫本地文件,然后可以對這個數據庫文件執行基本的sql操作. 就像在Windows平臺基于VC6.0的DAO數據庫編程一樣(創建一個本地文件.mdb).
        從網上找到了一個開源免費的數據庫開發工具--sqlite, 網上的關于sqlite的介紹有很多,詳細見官方網站:http://www.sqlite.com.cn/ . 我發現sqlite正是我需要的. 總結一下幾個特點:-
         

        1. 開放源代碼
        2. 程序特別小,在windows下應用程序sqlite.exe僅僅200kb以內。
        3. 支持大多數sql指令,速度極快
        4. 直接創建一個xxx.db, 就是一個數據庫,不需要服務器支持
        5. 簡潔的C語言API接口

        基于上面幾點,足可以看出sqlite的強大和優異之處。源代碼公開和程序特別小,甚至可以跨平臺直接編譯"gcc -o sqlite3 *",將這融合到潛入式系統是多么的美妙!

        在Ubuntu6.10平臺安裝sqlite3及其開發包:
        #sudo apt-get install sqlite3 libsqlite3-dev

        鏈接這篇文章介紹了sqlite的使用方法:
        http://www.sqlite.com.cn/MySqlite/4/378.Html

        下面是我總結的sqlite3與C接口的API
        我用到的主要是下面幾個函數(頭文件sqlite3.h):
        int sqlite3_open(const char*, sqlite3**); //打開一個數據庫
        int sqlite3_close(sqlite3*); //關閉
        int sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void*, char**);//執行
        int sqlite3_get_table(sqlite3*, const char *sql,char***result, int *nrow,int *ncolumn ,char **errmsg );
         //result中是以數組的形式存放所查詢的數據,首先是表名,再是數據;
         //nrow/ncolumn分別為查詢語句返回的結果集的行數/列數,沒有查到結果時返回0
        sqlite3_errcode() 通常用來獲取最近調用的API接口返回的錯誤代碼.
        sqlite3_errmsg() 則用來得到這些錯誤代碼所對應的文字說明.

        exec錯誤碼
        #define SQLITE_OK           0   /* Successful result */
        #define SQLITE_ERROR        1   /* SQL error or missing database */
        #define SQLITE_INTERNAL     2   /* An internal logic error in SQLite */
        #define SQLITE_PERM         3   /* Access permission denied */
        #define SQLITE_ABORT        4   /* Callback routine requested an abort */
        #define SQLITE_BUSY         5   /* The database file is locked */
        #define SQLITE_LOCKED       6   /* A table in the database is locked */
        #define SQLITE_NOMEM        7   /* A malloc() failed */
        #define SQLITE_READONLY     8   /* Attempt to write a readonly database */
        #define SQLITE_INTERRUPT    9   /* Operation terminated by sqlite_interrupt() */
        #define SQLITE_IOERR       10   /* Some kind of disk I/O error occurred */
        #define SQLITE_CORRUPT     11   /* The database disk image is malformed */
        #define SQLITE_NOTFOUND    12   /* (Internal Only) Table or record not found */
        #define SQLITE_FULL        13   /* Insertion failed because database is full */
        #define SQLITE_CANTOPEN    14   /* Unable to open the database file */
        #define SQLITE_PROTOCOL    15   /* Database lock protocol error */
        #define SQLITE_EMPTY       16   /* (Internal Only) Database table is empty */
        #define SQLITE_SCHEMA      17   /* The database schema changed */
        #define SQLITE_TOOBIG      18   /* Too much data for one row of a table */
        #define SQLITE_CONSTRAINT  19   /* Abort due to contraint violation */
        #define SQLITE_MISMATCH    20   /* Data type mismatch */
        #define SQLITE_MISUSE      21   /* Library used incorrectly */
        #define SQLITE_NOLFS       22   /* Uses OS features not supported on host */
        #define SQLITE_AUTH        23   /* Authorization denied */
        #define SQLITE_ROW         100  /* sqlite_step() has another row ready */
        #define SQLITE_DONE        101  /* sqlite_step() has finished executing */
        應用實例:

        定義
        sqlite3 *db = NULL;
        char * errMsg = NULL;
        char sql_cmd[200];

        打開文件:
        int rc = sqlite3_open("xxx.db", &db);
        if(rc) //打開失敗
              printf("Open database failed!\n");
          else
            printf("create the database successful!\n");

        建立表格:
             sprintf(sql_cmd,"CREATE TABLE datapro(package INTEGER,offset \
               INTEGER,lklen INTEGER,base INTEHER,link INTEGER,err INTEGER);");
             rc=sqlite3_exec(db,sql_cmd,0,0,&eMsg); //建立表datapro
             if(rc==SQLITE_OK) //建表成功
                   printf("create the chn_to_eng table successful!\n");
              else
                   printf("%s\n",eMsg);
        添加數據:
           sprintf(sql_cmd,"INSERT INTO datapro VALUES(%d,%d,%d,%d,%d,%d);",4,2345,268,9,3,3);
           rc=sqlite3_exec(pro_db,pro_sqlcmd,0,0,&eMsg);

        查詢:
         int nrow=0, ncolumn=0;
         char **azResult; //存放結果
         sql="SELECT * FROM datapro";
         sqlite3_get_table(db,sql,&azResult,&nrow,&ncolumn,&eMsg);
        //其中nrow為行數,ncolum為列數
         printf("\nThe result of querying is : \n");
         for(int i=1;i<nrow+1;i++)
         {
             for(int j=0;j<ncolumn;j++)
                 printf("%s    ",azResult[i*ncolumn+j]);
              printf("\n");
         }

        刪除:
         sprintf(sql_cmd,"DELETE FROM datapro WHERE package=1;") ;
         rc=sqlite3_exec(db,sql,0,0,&eMsg);


        本文出自:億恩科技【www.endtimedelusion.com】

        服務器租用/服務器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質保障!--億恩科技[ENKJ.COM]

      1. 您可能在找
      2. 億恩北京公司:
      3. 經營性ICP/ISP證:京B2-20150015
      4. 億恩鄭州公司:
      5. 經營性ICP/ISP/IDC證:豫B1.B2-20060070
      6. 億恩南昌公司:
      7. 經營性ICP/ISP證:贛B2-20080012
      8. 服務器/云主機 24小時售后服務電話:0371-60135900
      9. 虛擬主機/智能建站 24小時售后服務電話:0371-60135900
      10. 專注服務器托管17年
        掃掃關注-微信公眾號
        0371-60135900
        Copyright© 1999-2019 ENKJ All Rights Reserved 億恩科技 版權所有  地址:鄭州市高新區翠竹街1號總部企業基地億恩大廈  法律顧問:河南亞太人律師事務所郝建鋒、杜慧月律師   京公網安備41019702002023號
          1
         
         
         
         

        0371-60135900
        7*24小時客服服務熱線

         
         
        av不卡不卡在线观看_最近2018年中文字幕_亚洲欧美一区二区三区_一级A爱做片免费观看国产_日韩在线中文天天更新_伊人中文无码在线