• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            woaidongmao

            文章均收錄自他人博客,但不喜標題前加-[轉貼],因其丑陋,見諒!~
            隨筆 - 1469, 文章 - 0, 評論 - 661, 引用 - 0
            數據加載中……

            SQLite常用函數

            Sqlite常用函數:

            1、打開數據庫:
            說明:打開一個數據庫,文件名不一定要存在,如果此文件不存在,sqlite會自動創建。第一個參數指文件名,第二個參數則是定義的 sqlite3 ** 結構體指針(關鍵數據結構),這個結構底層細節如何,您不用管它。
            int sqlite3_open(                                                                

              const char *filename,   /* Database filename (UTF-8) */                        

              sqlite3 **ppDb          /* OUT: SQLite db handle */                            

            ); 
            返回值:表示操所是否正確  SQLITE_OK 操作正常)

             

            2、關閉數據庫:
            說明:如果用sqlite3_open開啟了一個數據庫,結尾時不要忘了用這個函數關閉數據庫。

            int sqlite3_close(sqlite3*);  //參數就是剛才的結構體,也就是數據庫句柄


            3
            、執行SQL語句:
            說 明:這個函數的功能是執行一條或者多條SQL語句,SQL語句之間用“;”號隔開。建議在執行一條或者多條SQL語句得時候,指定第三個參數回調函數,在 回調函數中可以獲得執行Sql得詳細過程,如果所有Sql執行完畢則應該返回0,否則,則說明這次執行并沒有完全成功。第五個參數:如果執行失敗(沒有返回0)則可以查看第五個闡述得值。來查看詳細錯誤信息。
            int sqlite3_exec(
            sqlite3*, /*
            已經打開的數據庫句柄 */
            const char *sql, /*
            要執行的Sql語句*/
            sqlite_callback, /*
            回調函數*/
            void *, /*
            傳遞給回調函數的參數*/
            char **errmsg /*
            保存錯誤信息*/
            );
            通常sqlite3_callback和它后面的void*這兩個位置都可以填NULL,表示不需要回調。比如您做insert操作,做delete操作,就沒有必要使用回調。而當作select時,就要使用回調,因為sqlite3把數據查出來,得通過回調告訴你查出了什么數據。

             

            4exec的回調

            typedef int (*sqlite3_callback)(void*, int, char**, char**);

            說明:你的回調函數必須定義為上面這個函數的類型。
            例如:

            int LoadMyInfo( void * para, int n_column, char ** column_value, char ** column_name )
            {
                        //para
            是你在 sqlite3_exec 里傳入的 void * 參數

                        //通過para參數,你可以傳入一些特殊的指針(比如類指針、結構指針),然后在這里面強制轉換成對應的類型(這里面是void*類型,必須強制轉換成你的類型才可用)。然后操作這些數據

                        //n_column是這一條記錄有多少個字段 (即這條記錄有多少列)

                        // char ** column_value 是個關鍵值,查出來的數據都保存在這里,它實際上是個1維數組(不要以為是2維數組),每一個元素都是一個 char * 值,是一個字段內容(用字符串來表示,以\0結尾)

                        //char ** column_name column_value是對應的,表示這個字段的字段名稱


            5
            、取當前插入位置:
            功能:返回你前一次插入得位置,從1開始,sqlite3* 為你打開數據庫所得到得句柄。
            long long int sqlite3_last_insert_rowid(sqlite3*);

            6
            、非回調select查詢:
            功能:執行一次查詢Sql 并且返回得到一個記錄集。
            int sqlite3_get_table(
            sqlite3*, /*
            已經打開的數據庫句柄 */
            const char *sql, /*
            要執行的Sql語句*/
            char ***resultp, /*
            保存返回記錄集的指針*/
            int *nrow, /*
            返回記錄數(及查出多少行)*/
            int *ncolumn, /*
            返回字段數(多少列)*/
            char **errmsg /*
            返回錯誤信息*/
            )

            說明:第三個參數是查詢結果,它是一維數組,內存布局為:第一行是字段名稱,后面是緊接著是每個字段的值。
            實例:

            int main( int , char ** )
            {
                        sqlite3 * db;
                        int result;
                        char * errmsg = NULL;

                     char **dbResult;

                        int nRow, nColumn;

                        int i , j;

                        int index;

                        result = sqlite3_open( “c:\\Dcg_database.db”, &db );
                     if( result != SQLITE_OK )
                     {
                        return -1;
                  }

            //數據庫操作代碼

            //假設前面已經創建了 MyTable_1

            //開始查詢,傳入的 dbResult 已經是 char **,這里又加了一個 & 取地址符,傳遞進去的就成了 char ***

            result = sqlite3_get_table( db, “select * from MyTable_1”, &dbResult, &nRow, &nColumn, &errmsg );

            if( SQLITE_OK == result )
            {
                   //
            查詢成功
                  index = nColumn; //
            前面說過 dbResult 前面第一行數據是字段名稱,從 nColumn 索引開始才是真正的數據
                   printf( “
            查到%d條記錄\n”, nRow );

                   for( i = 0; i < nRow ; i++ )
                   {
                       printf( “
            %d 條記錄\n”, i+1 );
                       for( j = 0 ; j < nColumn; j++ )
                       {
                            printf( “
            字段名:%s ?> 字段值:%s\n”, dbResult[j], dbResult [index] );
                            ++index; // dbResult
            的字段值是連續的,從第0索引到第 nColumn - 1索引都是字段名稱,從第 nColumn 索引開始,后面都是字段值,它把一個二維的表(傳統的行列表示法)用一個扁平的形式來表示
                       }
                       printf( “-------\n” );

                   }
            }

            //到這里,不論數據庫查詢是否成功,都釋放 char** 查詢結果,使用 sqlite 提供的功能來釋放
            sqlite3_free_table( dbResult );
            //
            關閉數據庫
            sqlite3_close( db );

            return 0;
            }


            7
            、釋放查詢結果:
            功能:釋放當前查詢的記錄集所占用的內存
            void sqlite3_free_table(char **result);

             

            實例:(SQLite數據庫使用回調函數的簡單C語言實例)

            1.       #include <stdio.h>

            2.        

            3.       #include <sqlite3.h>

            4.        

            5.        

            6.        

            7.       static int callback(void *NotUsed, int argc, char **argv, char **azColName)

            8.        

            9.       {

            10.    

            11.     int i;

            12.    

            13.     for(i=0; i<argc; i++)

            14.    

            15.     {

            16.    

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

            18.    

            19.     }

            20.    

            21.     printf("\n");

            22.    

            23.     return 0;

            24.    

            25.   }

            26.    

            27.    

            28.    

            29.   int main(int argc, char **argv)

            30.    

            31.   {

            32.    

            33.     sqlite3 *db;

            34.    

            35.     char *zErrMsg = 0;

            36.    

            37.     int rc;

            38.    

            39.    

            40.    

            41.     if( argc!=3 )

            42.    

            43.     {

            44.    

            45.       fprintf(stderr, "Usage: %s DATABASE SQL-STATEMENT\n", argv[0]);

            46.    

            47.       return 1;

            48.    

            49.     }

            50.    

            51.     rc = sqlite3_open(argv[1], &db);

            52.    

            53.     if( rc )

            54.    

            55.     {

            56.    

            57.       fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));

            58.    

            59.       sqlite3_close(db);

            60.    

            61.       return 1;

            62.    

            63.     }

            64.    

            65.     rc = sqlite3_exec(db, argv[2], callback, 0, &zErrMsg);

            66.    

            67.     if( rc!=SQLITE_OK )

            68.    

            69.     {

            70.    

            71.       fprintf(stderr, "SQL error: %s\n", zErrMsg);

            72.    

            73.       sqlite3_close(db);

            74.    

            75.       return 1;

            76.    

            77.     }

            78.    

            79.     sqlite3_close(db);

            80.    

            81.     return 0;

            82.    

            83.   }

             

             

            posted on 2009-06-23 15:04 肥仔 閱讀(2391) 評論(0)  編輯 收藏 引用 所屬分類: 數據庫

            婷婷久久综合九色综合九七| 2021少妇久久久久久久久久| 国产欧美久久久精品影院| 一本一本久久a久久精品综合麻豆| 国内精品久久久久影院老司| 久久人人爽人人爽人人片AV不| 精品久久久久久无码专区| 美女写真久久影院| 要久久爱在线免费观看| 99精品国产在热久久无毒不卡 | 久久精品国产免费| 久久伊人中文无码| 国内精品久久九九国产精品| 亚洲国产婷婷香蕉久久久久久| 国产精品无码久久综合| 亚洲国产成人久久笫一页| 777米奇久久最新地址| 欧美亚洲国产精品久久| 精品免费久久久久国产一区| 久久久久亚洲av无码专区| 亚洲国产成人乱码精品女人久久久不卡| 久久国产色AV免费观看| 久久久久久久久久久| 久久久久久极精品久久久| 久久被窝电影亚洲爽爽爽| 少妇内射兰兰久久| 久久精品国产乱子伦| 伊人久久五月天| 一本大道久久东京热无码AV| 久久亚洲精品无码播放| 久久99精品久久久久久不卡| 国产精品一久久香蕉产线看| 97超级碰碰碰久久久久| 国产精品久久久福利| 久久99精品国产| 久久久精品人妻一区二区三区蜜桃| 久久亚洲AV无码精品色午夜| 偷窥少妇久久久久久久久| 久久狠狠爱亚洲综合影院| 久久精品国产男包| 午夜精品久久久久久99热|