#include <windows.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <mysql.h> #include <iostream> #include<iomanip> #pragma comment(lib,"libmysql.lib")//连接MysQL需要的库 using namespace std; int main() { const char user[] = "root"; //username const char pswd[] = "016457t"; //password const char host[] = "localhost"; //or"127.0.0.1" const char table[] ="yggl"; //database unsigned int port = 3306; //server port MYSQL myCont; //句柄 MYSQL_RES *result;//理解为一个二维表类似 android中cursor MYSQL_ROW sql_row; //以行为单位 MYSQL_FIELD *fd; //域:以列为单位 char column[32][32]; int res; mysql_init(&myCont); //初始化mysql句柄.如果mysql为NULL, 则分配一个. if(mysql_real_connect(&myCont,host,user,pswd,table,port,NULL,0)) //连接数据库 { cout<<"connect succeed!"<<endl; mysql_query(&myCont, "SET NAMES GBK"); //设置编码格式,否则在cmd下无法显示中文 res=mysql_query(&myCont,"select * from employees");//勉强理解为查询失败返回true if(!res) //非res { result=mysql_store_result(&myCont);//保存查询到的数据到二维表result if(result)//判断二维表是否为空 { int i,j; cout<<"number of result: "<<(unsigned long)mysql_num_rows(result)<<endl; //获取表中行数 for(i=0;fd=mysql_fetch_field(result);i++)//光标以列为单位;用来从查询结果中取得字段的信息。 //如果没有指定字段偏移量,则提取下一个尚未被 mysql_fetch_field() 取得的字段 { strcpy(column[i],fd->name); //fd->name 很特殊 } j=mysql_num_fields(result); //表的字段数或宽度 for(i=0;i<j;i++) { cout<<std::left<<setw(10)<<column[i]; } cout<<' '; while(sql_row=mysql_fetch_row(result))//光标以行为单位;获取具体的数据 sql_row为一个一维数组 //mysql_fetch_row与mysql_fetch_field类似即如果没有指定行的偏移量,则提取 //下一个尚未被mysql_fetch_row取得的行 { for(i=0;i<j;i++) { cout<<std::left<<setw(10)<<sql_row[i]; } cout<<' '; } } } else { cout<<"query sql failed!"<<endl; } } else { cout<<"connect failed!"<<endl; } if(result!=NULL) mysql_free_result(result);//释放二维表result中的结果资源 mysql_close(&myCont);//断开与MySQL的连接 return 0; }