• <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>

            興海北路

            ---男兒仗劍自橫行
            <2013年10月>
            293012345
            6789101112
            13141516171819
            20212223242526
            272829303112
            3456789

            統(tǒng)計

            • 隨筆 - 85
            • 文章 - 0
            • 評論 - 17
            • 引用 - 0

            常用鏈接

            留言簿(6)

            隨筆分類

            隨筆檔案

            收藏夾

            全是知識啊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            linux下c語言學(xué)習(xí)筆記——操作mysql
            linux下c語言學(xué)習(xí)筆記——操作mysql

            By falcon     2006年3月30日晚上完成

            版權(quán)聲明:可以自由轉(zhuǎn)載,但是必須保留原作者名和本站地址,謝謝

            [由于最近比較忙,沒有時間來得及整理,下面所有代碼的具體編譯方法和原理請參考11樓以后的回復(fù),謝謝]

            今天上數(shù)據(jù)庫的時候剛上到嵌入式sql,感覺非常有意思,上課的時候就想反正做搜索引擎要用到c連接mysql數(shù)據(jù)庫的,到底是怎么實現(xiàn)?想入非非,呵呵.

            下來的時候趕緊找資料,剛才搜索了幾下,終于找到一些:
            1,[比較詳細(xì)]在 C 里嵌入 SQL:http://www.pgsqldb.org/pgsqldoc-7.4/ecpg.html
            2,[在MySQL數(shù)據(jù)庫中使用C執(zhí)行SQL語句]:http://www.dvbbs.net/tech/data/2006031818989.asp
            3,MySQL客戶工具和API:http://www.yesky.com/imagesnew/software/mysql/manual_Clients.html
            4,基于mysql的高性能數(shù)據(jù)庫應(yīng)用開發(fā):http://cache.baidu.com/c?word=mysql%3B%5F%3Breal%3B%5F%3Bconnect%2C%B2%CE%CA%FD&url=http%3A//www%2Edaima%2Ecom%2Ecn/Info/76/Info27780/&b=0&a=2&user=baidu


            大家一起來開始練習(xí)羅
            注:下面的所有例子在mandriva linux下測試通過

            1,使用c語言操作mysql之前,先在mysql里頭創(chuàng)建一個數(shù)據(jù)庫,一個表,在表里頭添加數(shù)據(jù)如下:

            創(chuàng)建數(shù)據(jù)庫,庫名為cusemysql:
            mysql>create database cusemysql;
            創(chuàng)建表,表名為:
            mysql>use cusemysql;
            mysql>create table children(childno int not null unique,fname varchar(20),age int);
            添加一點數(shù)據(jù)哦:
            mysql>insert into children values(5,"花兒",10);
            對拉,為了方便起見,把表的大致樣子給大家看看


            childno         fname         age
            1                   小星         9
            2                   大量           15



            2 ,下面進(jìn)行具體的操作

            插入:insert    

            好的,我們現(xiàn)編輯一段c代碼,取名為insert.c


            Code:

            [Ctrl+A Select All]



            代碼寫完了,要編譯哦
            #gcc -o insert insert.c -L /usr/local/mysql/lib/mysql/*.a -lz
            ok,現(xiàn)在我們執(zhí)行看看
            #./insert
            Connection Success
            Inserted 1 rows

            year,果然可以,呵呵
            不信到mysql下看看表children中是否多了剛才插入的那一行數(shù)據(jù)

            注:也許你會問上面gcc的命令參數(shù)是什么意思阿,其實,我也不太清楚,呵呵
            大概是要把mysql下的某個特定庫包含進(jìn)來,可是我不知道具體是個什么庫,所以用*.a全部包含進(jìn)來拉
            其實只要包含mysqlclient.a就可以,你試試看


            更新:update

            我們只要把上面的代碼中的

            res = mysql_query(&my_connection, "insert into children values(10,'Ann',5)");

            換成

            res = mysql_query(&my_connection, "update children set age=20 where childno<5 ");

            即可
            上面語句實現(xiàn)的功能是,把編號小于5的所有孩子的年齡全部改成20歲



            檢索:select

            看代碼之前,最好是先看藍(lán)色字體的部分[介紹了代碼中用到的一些函數(shù)的作用]


            Code:

            [Ctrl+A Select All]


            上面語句實現(xiàn)的功能是:檢索出年齡小于20歲的小孩的信息,不過沒有對信息進(jìn)行任何處理哦
            下次我們對數(shù)據(jù)進(jìn)行一定的處理

            這里介紹上面用到的幾個函數(shù):

            可以從SELECT語句(或其他返回數(shù)據(jù)的語句)中檢索完所有數(shù)據(jù),在單一調(diào)用中,使用mysql_store_result:

            MYSQL_RES *mysql_store_result(MYSQL *connection);

            必須在mysql_query檢索數(shù)據(jù)后才能調(diào)用這個函數(shù),以在結(jié)果集中存儲該數(shù)據(jù)。這個函數(shù)從服務(wù)器中檢索所有數(shù)據(jù)并立即將它存儲在客戶機(jī)中。它返回一個指向以前我們從未遇到過的結(jié)構(gòu)(結(jié)果集結(jié)構(gòu))的指針。如果語句失敗,則返回NULL。

            使用等價的PostgreSQL時,應(yīng)該知道返回NULL意味著已經(jīng)發(fā)生了錯誤,并且這與未檢索到數(shù)據(jù)的情況不同。即使,返回值不是NULL,也不意味著當(dāng)前有數(shù)據(jù)要處理。

            如果未返回NULL,則可以調(diào)用mysql_num_rows并且檢索實際返回的行數(shù),它當(dāng)然可能是0。

            my_ulonglong mysql_num_rows(MYSQL_RES *result);

            它從mysql_store_result取得返回的結(jié)果結(jié)構(gòu),并且在該結(jié)果集中返回行數(shù),行數(shù)可能為0。如果mysql_store_result成功,則mysql_num_rows也總是成功的。

            這 種mysql_store_result和mysql_num_rows的組合是檢索數(shù)據(jù)的一種簡便并且直接的方法。一旦 mysql_store_result成功返回,則所有查詢數(shù)據(jù)都已經(jīng)存儲在客戶機(jī)上并且我們知道可以從結(jié)果結(jié)構(gòu)中檢索它,而不用擔(dān)心會發(fā)生數(shù)據(jù)庫或網(wǎng)絡(luò) 錯誤,因為對于程序所有數(shù)據(jù)都是本地的。還可以立即發(fā)現(xiàn)返回的行數(shù),它可以使編碼更簡便。如前所述,它將所有結(jié)果立即地發(fā)送回客戶機(jī)。對于大結(jié)果集,它可 能耗費大量的服務(wù)器、網(wǎng)絡(luò)和客戶機(jī)資源。由于這些原因,使用更大的數(shù)據(jù)集時,最好僅檢索需要的數(shù)據(jù)。不久,我們將討論如何使用 mysql_use_result函數(shù)來完成該操作。

            一旦檢索了數(shù)據(jù),則可以使用mysql_fetch_row來檢索它,并且使用mysql_data_seek、mysql_row_seek、mysql_row_tell操作結(jié)果集。在開始檢索數(shù)據(jù)階段之前,讓我們先討論一下這些函數(shù)。

            MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);

            這個函數(shù)采用從存儲結(jié)果中獲取的結(jié)果結(jié)構(gòu),并且從中檢索單一行,在行結(jié)構(gòu)中返回分配給您的數(shù)據(jù)。當(dāng)沒有更多數(shù)據(jù)或者發(fā)生錯誤時,返回NULL。稍后,我們將回來處理這一行中的數(shù)據(jù)。

            void mysql_data_seek(MYSQL_RES *result, my_ulonglong offset);

            這個函數(shù)允許您進(jìn)入結(jié)果集,設(shè)置將由下一個獲取操作返回的行。offset是行號,它必須在從0到結(jié)果集中的行數(shù)減 1 的范圍內(nèi)。傳遞0將導(dǎo)致在下一次調(diào)用mysql_fetch_row時返回第一行。

            MYSQL_ROW_OFFEST mysql_row_tell(MYSQL_RES *result);

            這個函數(shù)返回一個偏移值,它表示結(jié)果集中的當(dāng)前位置。它不是行號,不能將它用于mysql_data_seek。但是,可將它用于:

            MYSQL_ROW_OFFSET mysql_row_seek(MYSQL_RES *result, MYSQL_ROW_OFFSET offset);

            它移動結(jié)果集中的當(dāng)前位置,并返回以前的位置。

            有時,這一對函數(shù)對于在結(jié)果集中的已知點之間跳轉(zhuǎn)很有用。請注意,不要將row tell和row seek使用的偏移值與data_seek使用的行號混淆。這些是不可交換的,結(jié)果將是您所希望看到的。

            void mysql_free_result(MYSQL_RES *result);

            完成結(jié)果集時, 必須總是調(diào)用這個函數(shù),以允許MySQL庫整理分配給它的對象。



            檢索并處理[比較全面哦,呵呵]:select    

            下面是詳細(xì)的代碼:


            Code:

            [Ctrl+A Select All]



            到此一些基本的操作都已經(jīng)實現(xiàn)拉,呵呵,怎一個爽自了得
            大家快點來阿

            posted on 2008-03-14 15:50 隨意門 閱讀(831) 評論(2)  編輯 收藏 引用

            評論

            # re: linux下c語言學(xué)習(xí)筆記——操作mysql 2008-03-14 15:53 隨意門

            編譯方法有點不規(guī)范。

            正確的應(yīng)該是這樣:

            1.在程序開頭包含頭文件應(yīng)這樣寫:
            #include <mysql.h>

            2.編譯應(yīng)這樣寫:

            $ gcc -o mysql mysql.c `mysql_config --cflags --libs`
              回復(fù)  更多評論    

            # re: linux下c語言學(xué)習(xí)筆記——操作mysql 2008-07-25 15:14 隨意門

            要告訴編譯器兩個路徑:
            1.編譯應(yīng)這樣寫:
            #gcc -o insert insert.c -I/usr/local/mysql/include/mysql/ -L/usr/local/mysql/lib/mysql -lmysqlclient
              回復(fù)  更多評論    

            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            久久久久久噜噜精品免费直播| 97久久精品无码一区二区天美| 区亚洲欧美一级久久精品亚洲精品成人网久久久久 | 国产成人精品久久二区二区 | 久久综合视频网| 亚洲午夜久久久影院伊人| 青青草原综合久久| 久久精品国产99久久久古代| 久久精品嫩草影院| 亚洲国产另类久久久精品黑人 | 久久久久国产精品嫩草影院| 国产一区二区精品久久| 久久国产精品无| 久久久久国产精品| 性色欲网站人妻丰满中文久久不卡| 国产成人精品综合久久久| 久久夜色精品国产欧美乱| 久久久久久久综合综合狠狠| 国产精品久久永久免费| 亚洲国产精品无码久久久秋霞2| 久久精品亚洲福利| 亚洲天堂久久精品| 久久免费线看线看| 久久久久久午夜成人影院| 久久综合久久美利坚合众国| 国产亚洲美女精品久久久| 久久国产一区二区| 久久综合丁香激情久久| 国产精品女同久久久久电影院| 亚洲女久久久噜噜噜熟女| 久久婷婷五月综合国产尤物app| 久久久久人妻一区精品| 国产成人精品久久一区二区三区av | 欧美成人免费观看久久| 久久夜色精品国产www| 狠狠人妻久久久久久综合| 色综合合久久天天综合绕视看| 久久精品国产91久久麻豆自制| 久久Av无码精品人妻系列| 久久久久女人精品毛片| 久久无码人妻一区二区三区|