C++连接MYSQL

 
  1. #include <stdio.h>    
  2.   
  3. #include <windows.h>    
  4.   
  5. #include <mysql.h>   
  6.   
  7. #define host "localhost"    
  8.   
  9. #define username "root"   
  10.   
  11. #define password "root123"   
  12.   
  13. #define database "ww"   
  14.   
  15. MYSQL *conn;  
  16.   
  17. int main()   
  18.   
  19. {  
  20.   
  21. MYSQL_RES *res_set;  
  22.   
  23. MYSQL_ROW row;  
  24.   
  25. unsigned int i,ret;  
  26.   
  27. FILE *fp;  
  28.   
  29. MYSQL_FIELD *field;  
  30.   
  31. unsigned int num_fields;  
  32.   
  33. conn = mysql_init(NULL);  
  34.   
  35. //ret = mysql_options(MYSQL *mysql, enum mysql_option option, const char *arg)   
  36.   
  37. ret = mysql_options(conn, MYSQL_SET_CHARSET_NAME, "gb2312");  
  38.   
  39. mysql_real_connect(conn,host,username,password,database,0,NULL,0);  
  40.   
  41.   
  42. fp = fopen ( "ww.out","w");  
  43.   
  44. fprintf(fp,"char set %s/n", mysql_character_set_name(conn));  
  45.   
  46. mysql_query(conn,"SELECT * FROM ww ");//WHERE a1='abc'");   
  47.   
  48. res_set = mysql_store_result(conn);  
  49.   
  50. while((field = mysql_fetch_field(res_set)))  
  51.   
  52. {  
  53.   
  54.     printf("field name %s/n", field->name);  
  55.   
  56. }  
  57.   
  58. num_fields = mysql_num_fields(res_set);  
  59.   
  60. for(i = 0; i < num_fields; i++)  
  61.   
  62. {  
  63.   
  64.     field = mysql_fetch_field_direct(res_set, i);  
  65.   
  66.     printf("Field %u is %s/n", i, field->name);  
  67.   
  68. }  
  69.   
  70. while ((row = mysql_fetch_row(res_set)) != NULL)  
  71.   
  72. {  
  73.   
  74. for (i=0; i<mysql_num_fields(res_set); i++)  
  75.   
  76. {  
  77.   
  78. fprintf(fp,"%s/n",row[i] != NULL ? row[i] : "NULL");  
  79.   
  80. }   
  81.   
  82. }   
  83.   
  84. mysql_close(conn);  
  85.   
  86. fclose(fp);  
  87.   
  88. return 0;  
  89.   
  90. }   

 

还可以如下:

1、设置工程属性

包含目录 D:/amp/MySQL5/lib/debug;D:/amp/MySQL5/include

2、头文件

代码:

#include "mysql.h"

#pragma comment(lib,"libmySQL.lib")

public:

 ...

 MYSQL mysql;

 char *sql;

 MYSQL_RES *result;

 MYSQL_ROW row;

4、连接数据库

//mysql_real_connect(数据库句柄,主机名,用户名,密码,数据库名,端口,命名管道,客户端标记)

代码:

  1. mysql_init(&mysql);  
  2.   
  3. if (!mysql_real_connect(&mysql,"localhost","root","1","mydb",3306,NULL,0))  
  4.   
  5. {  
  6.   
  7.  MessageBox(_T("数据库连接错误!"));  
  8.   
  9.  return FALSE;  
  10.   
  11. }  
  12.   
  13. mysql_query(&mysql,"SET NAMES gb2312");  
  14.   
  15. mysql_query(&mysql,"SET character set gb2312");  

5、如果连接成功,就可以进行数据库的读写了:

步骤是:

1.mysql_query()提交查询语句

2.mysql_use_result()获取上一次查询的结果集

3.mysql_fetch_row()从结果集中获取单项内容

4.mysql_free_result()释放结果集

根据建vc工程的属性:

a.如果不是unicode,只需要在输入输出数据库的地方加上mysql_query(&mysql,"SET NAMES gb2312");

b.如果是unicode,文件是ANSI编码,要进行转换,转换是用MultiByteToWideChar()和WideCharToMultiByte()这两个Windows API,前者ANSI > Unicode, 后者Unicode > ANSI。

  1. ANSI > Unicode:   
  2.   
  3. WCHAR ch[200];   
  4.   
  5. MultiByteToWideChar(CP_ACP,0,row[0],nLength[0]+1,ch,sizeof(ch));   
  6.   
  7. ===============================================   
  8.   
  9. Unicode > ANSI:   
  10.   
  11. // 将CString的内容转换为ANSI    
  12.   
  13. void UnicodeToAnsi( CString str,char *pstr )   
  14.   
  15. {   
  16.   
  17. WCHAR *pwtrQuery;   
  18.   
  19. pwtrQuery = (WCHAR *)(LPCTSTR)str;   
  20.   
  21. WideCharToMultiByte(CP_ACP,0,pwtrQuery,-1,pstr,strlen(pstr),NULL,NULL);   
  22.   
  23. }   
  24.   
  25. 使用方法:   
  26.   
  27. char ch[200];   
  28.   
  29. CString str = L"Unicode charactor";   
  30.   
  31. UnicodeToAnsi(ch, str);  
  32.   
  33.    
  34.   
  35. Unicode版代码:  
  36.   
  37.  sql = "select username,visitelist,remark from mytable";  
  38.   
  39.  if(mysql_query(&mysql, sql)!=0)  
  40.   
  41.  {  
  42.   
  43.   MessageBox(_T("读取表出错!"));  
  44.   
  45.   return;    
  46.   
  47.  }  
  48.   
  49.  if(!(result = mysql_use_result(&mysql)))  
  50.   
  51.  {  
  52.   
  53.   MessageBox(_T("读取数据集失败!"));  
  54.   
  55.   return;     
  56.   
  57.  }  
  58.   
  59.  int i = 0;  
  60.   
  61.  CString tmp;  
  62.   
  63.  WCHAR wsz[100];   
  64.   
  65.  unsigned long *nLength;   
  66.   
  67.  while(row = mysql_fetch_row(result))  
  68.   
  69.  {  
  70.   
  71.   //ANSI > Unicode   
  72.   
  73.   // 获取结果字段的长度    
  74.   
  75.   nLength = mysql_fetch_lengths(result);   
  76.   
  77.   // 获取结果集中第一个字段的内容    
  78.   
  79.   MultiByteToWideChar(CP_ACP,0,row[0],nLength[0]+1,wsz,sizeof(wsz));   
  80.   
  81.  // tmp.Format(_T("%s"),row[0]);   
  82.   
  83.   m_list.InsertItem(0, wsz);  
  84.   
  85.   nLength = mysql_fetch_lengths(result);   
  86.   
  87.   MultiByteToWideChar(CP_ACP,0,row[1],nLength[1]+1,wsz,sizeof(wsz));   
  88.   
  89.  // tmp.Format(_T("%s"),row[1]);   
  90.   
  91.   m_list.SetItemText(0, 1, wsz);  
  92.   
  93.   nLength = mysql_fetch_lengths(result);   
  94.   
  95.   MultiByteToWideChar(CP_ACP,0,row[2],nLength[2]+1,wsz,sizeof(wsz));   
  96.   
  97.  // tmp.Format(_T("%s"),row[2]);   
  98.   
  99.   m_list.SetItemText(0, 2, wsz);  
  100.   
  101.   i++;  
  102.   
  103.  }  
  104.   
  105.  mysql_free_result(result);  
  106.   
  107. 非Unicode版代码:  
  108.   
  109.  ...  
  110.   
  111.  while(row = mysql_fetch_row(result))  
  112.   
  113.  {  
  114.   
  115.   tmp.Format("%s",row[0]);  
  116.   
  117.   m_list.InsertItem(0, tmp);  
  118.   
  119.   nLength = mysql_fetch_lengths(result);   
  120.   
  121.   tmp.Format("%s",row[1]);  
  122.   
  123.   m_list.SetItemText(0, 1, tmp);  
  124.   
  125.   nLength = mysql_fetch_lengths(result);   
  126.   
  127.   tmp.Format("%s",row[2]);  
  128.   
  129.   m_list.SetItemText(0, 2, tmp);  
  130.   
  131.   i++;  
  132.   
  133.  }  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值