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
完