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
完