共计 6751 个字符,预计需要花费 17 分钟才能阅读完成。
这篇文章主要讲解了“C++ 的 VS2010 和 MySQL 数据库的链接问题举例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着丸趣 TV 小编的思路慢慢深入,一起来研究和学习“C++ 的 VS2010 和 MySQL 数据库的链接问题举例分析”吧!
// 下面的代码是一个实现 C ++ 连接 MYSQL 数据库的很好的例子
// 这里用了建表,插入,检索,删表等常用功能
// 我用 VC++6.0 生成,已经成功连接了。// 在 VC++6.0 中要想把做一下两步准备工作才可以。//(1)Tools- Options- Directories- Include files 中添加 C:\Program Files\MySQL\MySQL Server 6.0\include
//(2)Tools- Options- Directories- Library files 中添加 C:\Program Files\MySQL\MySQL Server 6.0\lib\opt
// 其实就是将头文件和库文件包含进来
// 我觉得这个例子写的很好,再结合自己的试验,特地介绍给大家!#include winsock.h
#include iostream
#include string
#include mysql.h
using namespace std;
#pragma comment(lib, ws2_32.lib)
#pragma comment(lib, libmysql.lib)
// 单步执行,不想单步执行就注释掉
#define STEPBYSTEP
int main() {
cout **************************************** endl;
#ifdef STEPBYSTEP
system( pause
#endif
// 必备的一个数据结构
MYSQL mydata;
// 初始化数据库
if (0 == mysql_library_init(0, NULL, NULL)) {cout mysql_library_init() succeed endl;
} else {cout mysql_library_init() failed endl;
return -1;
#ifdef STEPBYSTEP
system( pause
#endif
// 初始化数据结构
if (NULL != mysql_init( mydata)) {cout mysql_init() succeed endl;
} else {cout mysql_init() failed endl;
return -1;
#ifdef STEPBYSTEP
system( pause
#endif
// 在连接数据库之前,设置额外的连接选项
// 可以设置的选项很多,这里设置字符集,否则无法处理中文
if (0 == mysql_options( mydata, MYSQL_SET_CHARSET_NAME, gbk)) {cout mysql_options() succeed endl;
} else {cout mysql_options() failed endl;
return -1;
#ifdef STEPBYSTEP
system( pause
#endif
// 连接数据库
if (NULL
!= mysql_real_connect( mydata, localhost , root , test , test ,
3306, NULL, 0))
// 这里的地址,用户名,密码,端口可以根据自己本地的情况更改
cout mysql_real_connect() succeed endl;} else {cout mysql_real_connect() failed endl;
return -1;
#ifdef STEPBYSTEP
system( pause
#endif
//sql 字符串
string sqlstr;
// 创建一个表
sqlstr = CREATE TABLE IF NOT EXISTS user_info
sqlstr += (
sqlstr +=
user_id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT Unique User ID ,
sqlstr +=
user_name VARCHAR(100) CHARACTER SET gb2312 COLLATE gb2312_chinese_ci NULL COMMENT Name Of User ,
sqlstr +=
user_second_sum INT UNSIGNED NOT NULL DEFAULT 0 COMMENT The Summation Of Using Time
sqlstr +=
if (0 == mysql_query( mydata, sqlstr.c_str())) {cout mysql_query() create table succeed endl;
} else {cout mysql_query() create table failed endl;
mysql_close(mydata);
return -1;
#ifdef STEPBYSTEP
system( pause
#endif
// 向表中插入数据
sqlstr =
INSERT INTO user_info(user_name) VALUES(公司名称),(一级部门),(二级部门),(开发小组),( 姓名
if (0 == mysql_query( mydata, sqlstr.c_str())) {cout mysql_query() insert data succeed endl;
} else {cout mysql_query() insert data failed endl;
mysql_close(mydata);
return -1;
#ifdef STEPBYSTEP
system( pause
#endif
// 显示刚才插入的数据
sqlstr = SELECT user_id,user_name,user_second_sum FROM user_info
MYSQL_RES *result = NULL;
if (0 == mysql_query( mydata, sqlstr.c_str())) {cout mysql_query() select data succeed endl;
// 一次性取得数据集
result = mysql_store_result(mydata);
// 取得并打印行数
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(mydata);
return -1;
#ifdef STEPBYSTEP
system( pause
#endif
// 删除刚才建的表
sqlstr = DROP TABLE user_info
if (0 == mysql_query( mydata, sqlstr.c_str())) {cout mysql_query() drop table succeed endl;
} else {cout mysql_query() drop table failed endl;
mysql_close(mydata);
return -1;
mysql_free_result(result);
mysql_close(mydata);
mysql_server_end();
system( pause
return 0;
}
原文地址:C++ 日记——Mysql 和 vs2010 的连接作者:赤道与北极
使用的是 API 方式,使用 Mysql 的数据库资源,所以需要包含头文件、连接 Lib 和获取相应的 dll 文件。
一 vc 的设置
这里使用的是 vs2010,所以附上 vs2010 的设置
(1)打开 VC6.0 工具栏 Tools 菜单下的 Options 选项,在 Directories 的标签页中右边的“Show directories for:”下拉列表中选中“Includefiles”,然后在中间列表框中添加你本地安装 MySQL 的 include 目录路径。(我的是 D:Program FilesMySQLMySQL Server 5.0include)。
vs2010 中的设置,在:项目 - 属性 - 配置属性 -VC++ 目录 - 包含目录
(2)在上面说到的“Show directories for:”下拉列表中选中“Library files”,然后添加你本地安装 MySQL 的 Lib 目录路径。Lib 目录下还有 debug 和 opt 两个目录,建议选 debug。(我的是 D:Program FilesMySQLMySQL Server 5.0libdebug)。
vs2010 中的设置,在:项目 - 属性 - 配置属性 -VC++ 目录 - 库目录
或者:项目 - 属性 - 配置属性 - 连接器 - 常规 - 附加库目录
(3)在“Project settings- Link:Object/library modules”里面添加“libmysql.lib”。
vs2010 中的设置,在:项目 - 属性 - 配置属性 - 连接器 - 输入 - 附加依赖项
(4)在 stdafx.h 里面添加如下的内容:
#include mysql.h
#include winsock.h // 如果编译出错, 则把该行放到 #include mysql.h 之前 #pragma comment(lib, libmySQL.lib) // 如果在附加依赖项里已增加, 则就不要添加了
(5)建议将“libmySQL.lib、libmySQL.dll”拷到你所建的工程的目录下。
这个也需要!
二 数据库的相关操作
打开“开始 - 所有程序 - MySQL- MySQL Server 5.0- MySQL Command Line Client.exe”,如果没有设置密码就直接按回车,会提示服务器启动成功。
mysql SHOW DATABASES;// 显示所有的数据库,注意一定要 敲“;”后再按回车
mysql CREATE DATABASE mydb;// 创建数据库 mydb
mysql USE mydb;// 选择你所创建的数据库 mydb
mysql SHOW TABLES; // 显示数据库中的表
mysql CREATE TABLE mytable (username VARCHAR(100), visitelist VARCHAR(200),
remark VARCHAR(200));// 创建一个表 mytable: 用户名;访问列表
;备注
mysql DESCRIBE mytable;// 显示表的结构
三 VC 编程
MYSQL mysql; // 数据库连接句柄
mysql_init (mysql);
if(!mysql_real_connect( mysql, localhost , root ,NULL, mydb ,3306,NULL,0)) {//mydb 为你所创建的数据库,3306 为端口号,可自行设定
AfxMessageBox( 数据库连接失败
return FALSE;
}
(1)实现添加 功能
CString strUsername,strList,strRemark,strSQL;
strSQL.Format(insert into mytable(username,visitelist,remark) values(%s , %s , %s) , strUsername,strList,strRemark);// 注意一定要写在一行,而且必须要有
if(mysql_real_query( mysql,(char*)(LPCTSTR)strSQL,(UINT)strSQL.GetLength())!=0){
AfxMessageBox(增添失败 }
(2)实现修改功能
CString strUsername,strList,strRemark,strSQL,str_PreName;//str_PreName 用于记录想要修改的行,详情请看源代码
strSQL.Format(update mytable set username= %s ,visitelist= %s , remark= %s where username= %s ,strUsername,strList,strRemark,str_PreName);
if(mysql_real_query( mysql,(char*)(LPCTSTR)strSQL,(UINT)strSQL.GetLength())!=0){
AfxMessageBox(修改失败 }
(3)实现删除功能
CString strSQL;
strSQL.Format(delete from mytable where username= %s ,str_PreName);// 必须要有
if(mysql_real_query( mysql,(char*)(LPCTSTR)strSQL,(UINT)strSQL.GetLength())!=0){
AfxMessageBox(删除失败 }
(4)读取表格内容到 CListCtrl 控件 m_list
m_list.DeleteAllItems();
char *ch_query;
ch_query= select * from mytable
if(mysql_real_query( mysql,ch_query,(UINT)strlen(ch_query))!=0){
AfxMessageBox( 数据库中表格出错
CString str;
MYSQL_RES *result;
MYSQL_ROW row;
if(!(result=mysql_use_result( mysql))){
AfxMessageBox( 读取数据集失败
int i=0;
while(row=mysql_fetch_row(result)){str.Format( %s ,row[0]);
m_list.InsertItem(i,str);
str.Format(%s ,row[1]);
m_list.SetItemText(i,1,str);
str.Format(%s ,row[2]);
m_list.SetItemText(i,2,str);
mysql_free_result(result);
做一些添加:
while (row=mysql_fetch_row(result))
{num=mysql_num_fields(result);
for (int j=0;j j++)
...}
mysql_fetch_row 依次获取受影响的行,当结束时返回 NULL,mysql_num_fields 获取该行的列数。注意,这里的 row 是 char** 类型,即 row[i] 是 char* 类型。
(5)关闭数据库
mysql_close(mysql);// 最好写到 OnDestroy() 函数中
感谢各位的阅读,以上就是“C++ 的 VS2010 和 MySQL 数据库的链接问题举例分析”的内容了,经过本文的学习后,相信大家对 C ++ 的 VS2010 和 MySQL 数据库的链接问题举例分析这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是丸趣 TV,丸趣 TV 小编将为大家推送更多相关知识点的文章,欢迎关注!