zoukankan      html  css  js  c++  java
  • c 连接mysql

    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 !" ) ; 
                } 
    
            }
    };
    
        int
    main ( 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

  • 相关阅读:
    easyui datagrid 显示 footer
    ie浏览器 vuejs axios Promise 未定义
    react引入富文本编辑器TinyMCE
    react中ant-design组件实现textarea获取光标位置并插入表情图片
    前端日志埋点优化
    iframe父子页面通讯
    HTML5中的audio在react中的使用----语音播放进度条、倍速播放、下载等
    echarts简单入门
    在textarea里实现获取光标位置和选中内容
    lodash数组发现之旅--------The second day
  • 原文地址:https://www.cnblogs.com/wangkangluo1/p/2571800.html
Copyright © 2011-2022 走看看