001//下面的代码是一个实现C++连接MYSQL数据库的很好的例子 002//这里用了建表,插入,检索,删表等常用功能 003//我用VC++6.0生成,已经成功连接了。 004//在VC++6.0中要想把做一下两步准备工作才可以。 005//(1)Tools->Options->Directories->Include files中添加C:\Program Files\MySQL\MySQL Server 6.0\include 006//(2)Tools->Options->Directories->Library files中添加C:\Program Files\MySQL\MySQL Server 6.0\lib\opt 007//其实就是将头文件和库文件包含进来 008//我觉得这个例子写的很好,再结合自己的试验,特地介绍给大家! 009 010#include <winsock.h> 011#include <iostream> 012#include <string> 013#include <mysql.h> 014using namespace std; 015 016#pragma comment(lib, "ws2_32.lib") 017#pragma comment(lib, "libmysql.lib") 018 019//单步执行,不想单步执行就注释掉 020#define STEPBYSTEP 021 022int main() { 023 cout << "****************************************" << endl; 024 025#ifdef STEPBYSTEP 026 system("pause"); 027#endif 028 029 //必备的一个数据结构 030 MYSQL mydata; 031 032 //初始化数据库 033 if (0 == mysql_library_init(0, NULL, NULL)) { 034 cout << "mysql_library_init() succeed" << endl; 035 } else { 036 cout << "mysql_library_init() failed" << endl; 037 return -1; 038 } 039 040#ifdef STEPBYSTEP 041 system("pause"); 042#endif 043 044 //初始化数据结构 045 if (NULL != mysql_init(&mydata)) { 046 cout << "mysql_init() succeed" << endl; 047 } else { 048 cout << "mysql_init() failed" << endl; 049 return -1; 050 } 051 052#ifdef STEPBYSTEP 053 system("pause"); 054#endif 055 056 //在连接数据库之前,设置额外的连接选项 057 //可以设置的选项很多,这里设置字符集,否则无法处理中文 058 if (0 == mysql_options(&mydata, MYSQL_SET_CHARSET_NAME, "gbk")) { 059 cout << "mysql_options() succeed" << endl; 060 } else { 061 cout << "mysql_options() failed" << endl; 062 return -1; 063 } 064 065#ifdef STEPBYSTEP 066 system("pause"); 067#endif 068 069 //连接数据库 070 if (NULL 071 != mysql_real_connect(&mydata, "localhost", "root", "test", "test", 072 3306, NULL, 0)) 073 //这里的地址,用户名,密码,端口可以根据自己本地的情况更改 074 { 075 cout << "mysql_real_connect() succeed" << endl; 076 } else { 077 cout << "mysql_real_connect() failed" << endl; 078 return -1; 079 } 080 081#ifdef STEPBYSTEP 082 system("pause"); 083#endif 084 085 //sql字符串 086 string sqlstr; 087 088 //创建一个表 089 sqlstr = "CREATE TABLE IF NOT EXISTS user_info"; 090 sqlstr += "("; 091 sqlstr += 092 "user_id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'Unique User ID',"; 093 sqlstr += 094 "user_name VARCHAR(100) CHARACTER SET gb2312 COLLATE gb2312_chinese_ci NULL COMMENT 'Name Of User',"; 095 sqlstr += 096 "user_second_sum INT UNSIGNED NOT NULL DEFAULT 0 COMMENT 'The Summation Of Using Time'"; 097 sqlstr += ");"; 098 if (0 == mysql_query(&mydata, sqlstr.c_str())) { 099 cout << "mysql_query() create table succeed" << endl; 100 } else { 101 cout << "mysql_query() create table failed" << endl; 102 mysql_close(&mydata); 103 return -1; 104 } 105 106#ifdef STEPBYSTEP 107 system("pause"); 108#endif 109 110 //向表中插入数据 111 sqlstr = 112 "INSERT INTO user_info(user_name) VALUES('公司名称'),('一级部门'),('二级部门'),('开发小组'),('姓名');"; 113 if (0 == mysql_query(&mydata, sqlstr.c_str())) { 114 cout << "mysql_query() insert data succeed" << endl; 115 } else { 116 cout << "mysql_query() insert data failed" << endl; 117 mysql_close(&mydata); 118 return -1; 119 } 120 121#ifdef STEPBYSTEP 122 system("pause"); 123#endif 124 125 //显示刚才插入的数据 126 sqlstr = "SELECT user_id,user_name,user_second_sum FROM user_info"; 127 MYSQL_RES *result = NULL; 128 if (0 == mysql_query(&mydata, sqlstr.c_str())) { 129 cout << "mysql_query() select data succeed" << endl; 130 131 //一次性取得数据集 132 result = mysql_store_result(&mydata); 133 //取得并打印行数 134 int rowcount = mysql_num_rows(result); 135 cout << "row count: " << rowcount << endl; 136 137 //取得并打印各字段的名称 138 unsigned int fieldcount = mysql_num_fields(result); 139 MYSQL_FIELD *field = NULL; 140 for (unsigned int i = 0; i < fieldcount; i++) { 141 field = mysql_fetch_field_direct(result, i); 142 cout << field->name << "\t\t"; 143 } 144 cout << endl; 145 146 //打印各行 147 MYSQL_ROW row = NULL; 148 row = mysql_fetch_row(result); 149 while (NULL != row) { 150 for (int i = 0; i < fieldcount; i++) { 151 cout << row[i] << "\t\t"; 152 } 153 cout << endl; 154 row = mysql_fetch_row(result); 155 } 156 157 } else { 158 cout << "mysql_query() select data failed" << endl; 159 mysql_close(&mydata); 160 return -1; 161 } 162 163#ifdef STEPBYSTEP 164 system("pause"); 165#endif 166 167 //删除刚才建的表 168 sqlstr = "DROP TABLE user_info"; 169 if (0 == mysql_query(&mydata, sqlstr.c_str())) { 170 cout << "mysql_query() drop table succeed" << endl; 171 } else { 172 cout << "mysql_query() drop table failed" << endl; 173 mysql_close(&mydata); 174 return -1; 175 } 176 mysql_free_result(result); 177 mysql_close(&mydata); 178 mysql_server_end(); 179 180 system("pause"); 181 return 0; 182}