代码片段(1)
[代码] [C/C++]代码
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> |
014 | using namespace std; |
015 |
016 | #pragma comment(lib, "ws2_32.lib") |
017 | #pragma comment(lib, "libmysql.lib") |
018 |
019 | //单步执行,不想单步执行就注释掉 |
020 | #define STEPBYSTEP |
021 |
022 | int 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 | } |