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
完