c 串連mysql

來源:互聯網
上載者:User

apt-get install libmysqlclient-dev

mysql 使用的是xampp 需要指定sock

源碼:main.c

#if defined(_WIN32) || defined(_WIN64)  //為了支援windows平台上的編譯#include <windows.h>#endif#include <stdio.h>#include <stdlib.h>#include <mysql/mysql.h>  //我的機器上該檔案在/usr/local/include/mysql下 //定義資料庫操作的宏,也可以不定義留著後面直接寫進代碼#define SELECT_QUERY "select username from test where userid = %d" int main(int argc, char **argv) //char **argv 相當於 char *argv[]{    MYSQL mysql,*sock;    //定義資料庫連接的控制代碼,它被用於幾乎所有的MySQL函數    MYSQL_RES *res;       //查詢結果集,結構類型    MYSQL_FIELD *fd ;     //包含欄位資訊的結構    MYSQL_ROW row ;       //存放一行查詢結果的字串數組    char  qbuf[160];      //存放查詢sql語句字串        if (argc != 2) {  //檢查輸入參數        fprintf(stderr,"usage : mysql_select <userid>\n\n");        exit(1);    }        mysql_init(&mysql);    if (!(sock = mysql_real_connect(&mysql,"localhost","root","","test",3306, "/opt/lampp/var/mysql/mysql.sock" ,0))) {        fprintf(stderr,"Couldn't connect to engine!\n%s\n\n",mysql_error(&mysql));        perror("");        exit(1);    }        sprintf(qbuf,SELECT_QUERY,atoi(argv[1]));    if(mysql_query(sock,qbuf)) {        fprintf(stderr,"Query failed (%s)\n",mysql_error(sock));        exit(1);    }        if (!(res=mysql_store_result(sock))) {        fprintf(stderr,"Couldn't get result from %s\n", mysql_error(sock));        exit(1);    }        printf("number of fields returned: %d\n",mysql_num_fields(res));            while (row = mysql_fetch_row(res)) {        printf("Ther userid #%d 's username is: %s\n", atoi(argv[1]),(((row[0]==NULL)&&(!strlen(row[0]))) ? "NULL" : row[0])) ;         puts( "query ok !\n" ) ;     }         mysql_free_result(res);    mysql_close(sock);    exit(0);    return 0;   //. 為了相容大部分的編譯器加入此行}

編譯:

 gcc -o mysql_select ./main.c -lmysqlclient

 

 

簡單類封裝

 test.sql   

mysql>use test;

mysql>source ~/test.sql;
DROP TABLE IF EXISTS `test`;/*!40101 SET @saved_cs_client     = @@character_set_client */;/*!40101 SET character_set_client = utf8 */;CREATE TABLE `test` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `value` text,  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1;/*!40101 SET character_set_client = @saved_cs_client */;---- Dumping data for table `test`--LOCK TABLES `test` WRITE;/*!40000 ALTER TABLE `test` DISABLE KEYS */;INSERT INTO `test` VALUES (1,'hxl'),(2,'sqlite'),(3,'test'),(4,'for'),(5,'linux');/*!40000 ALTER TABLE `test` ENABLE KEYS */;UNLOCK TABLES;/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;-- Dump completed on 2012-07-02 23:52:14

 

main.cc

#include    <cstdlib>#include    <fstream>#include    <iomanip>   #include    <iostream> extern "C"{ #include        <mysql/mysql.h>#include        <string.h>}using namespace std;class MyDb{    private:        MYSQL mysql,*sock;    //定義資料庫連接的控制代碼,它被用於幾乎所有的MySQL函數        MYSQL_RES *res;       //查詢結果集,結構類型        MYSQL_FIELD *fd ;     //包含欄位資訊的結構        MYSQL_ROW row ;       //存放一行查詢結果的字串數組    public:        MyDb()        {            cout<<"nothing"<<endl;        }        MyDb(char *ip, char *user, char *passwd, char *db_name, int port, char *socket)        {            mysql_init(&mysql);            if (!(sock = mysql_real_connect(&mysql, ip, user, passwd, db_name, port, socket ,0))) {                fprintf(stderr,"Couldn't connect to engine!\n%s\n\n",mysql_error(&mysql));                perror("");                exit(1);            }        }        ~MyDb()        {            mysql_free_result(res);            mysql_close(sock);              cout<<"connect destoryed"<<endl;        }        void  get(char *str)        {            if(mysql_query(sock,str)) {                fprintf(stderr,"Query failed (%s)\n",mysql_error(sock));                exit(1);            }            if (!(res=mysql_store_result(sock))) {                fprintf(stderr,"Couldn't get result from %s\n", mysql_error(sock));                exit(1);            }            printf("number of fields returned: %d\n",mysql_num_fields(res));            while (row = mysql_fetch_row(res)) {                printf("Ther username is: %s\n",(((row[0]==NULL)&&(!strlen(row[0]))) ? "NULL" : row[0])) ;                 puts( "query ok !" ) ;             }         }};    intmain ( int argc, char *argv[] ){    MyDb test("localhost","root","","test", 3306,"/opt/lampp/var/mysql/mysql.sock");    test.get("select value from test where id = 1");    return EXIT_SUCCESS;}        // ----------  end of function main  ---------- 

 

 

編譯:

g++ -g -o mysql_select ./mysql.cc -lmysqlclient

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.