VC++6.0連接MySQL數據庫(MySQL API)


 

一、MySQL的安裝

   Mysql的安裝去官網下載就可以。。。最新的是5.7版本。。

二、VC6.0的設置

(1)打開VC6.中選0 工具欄Tools菜單下的Options選項,在Directories的標簽頁中右邊的“Show directories for:”下拉列表中“Includefiles”,然后在中間列表框中添加你本地安裝MySQL的include目錄路徑。如圖:

   

(2)在上面說到的“Show directories for:”下拉列表中選中“Library files”,然后添加你本地安裝MySQL的Lib目錄路徑。如圖:

   

   **這里要說明一下:細心的人會發現我的這個目錄和上一個圖中的不一樣,這是因為這個錯誤:libmysql.lib : fatal error LNK1113: invalid machine 無效的服務器

   這是因為vc開發的是32位的程序,而mysql數據庫是64位導致的,你用32位的程序去操作64位的數據庫肯定會出錯,我在下一篇博文中將詳細說明怎么解決。

(3)在“Project settings->Link:Object/library modules”里面添加“libmysql.lib”。
        

(4)建議將“libmySQL.lib、libmySQL.dll”拷到你所建的工程的目錄下。

      這兩個文件在D:\Mysql\lib目錄下。

   三、編程實現

   1. 一個簡單的小程序,看看是否能連接成功。。。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <windows.h>
#include <mysql.h>
 
int  main()
{
 
        MYSQL mysql;
        mysql_init(&mysql);  //初始化mysql結構
 
        if (!mysql_real_connect(&mysql, "localhost" , "myuser" , "123456" , "student_db" ,3306,NULL,0))
               printf ( "\n連接數據庫時發生錯誤!\n" );
        else
               printf ( "\n連接數據庫成功!\n" );
 
        mysql_close(&mysql);  //釋放數據庫
   
        return  0;
}

  mysql_real_connect(&mysql,"localhost","myuser","123456","student_db",3306,NULL,0)//myuser是我的用戶名,“123456”是密碼,“student_db”是數據庫,3306是端口號

  2.實現查詢小程序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
// test.cpp : Defines the entry point for the console application.
//
#include <stdio.h>
#include <windows.h>
#include "StdAfx.h"
 
#include <winsock.h> 
#include <iostream> 
#include <string> 
#include <mysql.h> 
using  namespace  std; 
//不需要單步調試的就注釋掉 
//#define STEPBYSTEP 
   
void  pause(){ 
   
     #ifdef STEPBYSTEP 
         system ( "pause" ); 
     #endif 
void  writeToFile( const  char  *s) 
   
      FILE  *fp= fopen ( "info.txt" , "rw" ); 
      fprintf (fp,s); 
      fclose (fp); 
   
  /* int main()
 
{
 
        MYSQL mysql;
        mysql_init(&mysql); //初始化mysql結構
 
        if(!mysql_real_connect(&mysql,"localhost","myuser","123456","student_db",3306,NULL,0))
               printf("\n連接數據庫時發生錯誤!\n");
        else
               printf("\n連接數據庫成功!\n");
 
        mysql_close(&mysql); //釋放數據庫
   
        return 0;
}*/
int  main( int  argc,  char * argv[]){ 
   
     cout<< "start...." <<endl; 
     pause(); 
     MYSQL mysql; 
     if (0==mysql_library_init(0,NULL,NULL)) 
    
         cout<< "mysql_library_init succeed" <<endl; 
   
     } else
         cout<< "mysql_library_init failed" <<endl; 
         return  -1; 
    
     pause(); 
     if (NULL!=mysql_init(&mysql)) 
    
   
         cout<< "mysql_init succeed" <<endl; 
     } else
         cout<< "mysql_init failed" <<endl; 
         return  -1; 
    
     pause(); 
     if (0==mysql_options(&mysql,MYSQL_SET_CHARSET_NAME, "gb2312" )) 
    
   
         cout<< "mysql_option succeed" <<endl; 
     } else
         cout<< "mysql_option failed" <<endl; 
         return  -1; 
    
     pause(); 
   
     if (NULL!=mysql_real_connect(&mysql, "localhost" , "myuser" , "123456" , "student_db" ,3306,NULL,0)) 
    
   
         cout<< "mysql_real_connect succeed" <<endl; 
     } else
         cout<< "mysql_real_connect failed" <<endl; 
         return  -1; 
    
     pause(); 
     string sql; 
     
     sql= "select * from sgroup"
     MYSQL_RES *result=NULL; 
     if (0==mysql_query(&mysql,sql.c_str())) 
    
   
             cout<< "mysql_query select succeed" <<endl; 
             result=mysql_store_result(&mysql); 
             int  rowcount=mysql_num_rows(result); 
             cout<< "row count:" <<rowcount<<endl; 
             unsigned  int  fieldcount=mysql_num_fields(result); 
             MYSQL_FIELD *field=NULL; 
             for (unsigned  int  i=0;i<fieldcount;i++) 
            
   
                 field=mysql_fetch_field_direct(result,i); 
                 cout<<field->name<< "\t\t"
            
             cout<<endl; 
             MYSQL_ROW row=NULL; 
             row=mysql_fetch_row(result); 
             while (NULL!=row) 
            
   
                 for ( int  i=0;i<fieldcount;i++){ 
   
                     cout<<row[i]<< "\t\t"
   
                
                 cout<<endl; 
                 row=mysql_fetch_row(result); 
   
            
     } else
   
             cout<< "mysql_query select data failed" <<endl; 
             mysql_close(&mysql); 
             return  -1; 
    
     pause(); 
     /*sql="drop table user_info"; 
     if(0==mysql_query(&mysql,sql.c_str())) 
    
   
             cout<<"mysql_query drop table succeed"<<endl; 
     }else{ 
             cout<<"mysql_query drop table failed"<<endl; 
             mysql_close(&mysql); 
             return -1; 
   
     }  */
     mysql_free_result(result); 
     mysql_close(&mysql); 
     mysql_server_end(); 
   
   
     system ( "pause" ); 
     return  0; 
}

  運行結果:

 至此連接成功。。哈哈。。

 

補充:c/c++連接數據庫的方式不止一種,上面介紹的是通過MySQL自身提供C語言形式的API來進行數據庫連接。除此之外還可以用connector c++來進行連接。不同的連接方式在效率、穩定性方面存在差異。

 

參考原文傳送門:https://www.cnblogs.com/jycboy/p/5170637.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM