应用mysql的api连接相关主题素材

图片 12
数据库

c++使用mysql的api连接相关问题

记录一下自己使用中的相关问题,方便有同样问题的同学解决。

关于在VS中的各种配置,看这里,不过需要注意一下,我现在用的mysql版本是5.6的,已经没有【MySQL
Server \lib\opt】这个路径了,将这一项设置到【MySQL Server
\lib】即可

如果出现如下错误:

1>main.obj : error LNK2019: 无法解析的外部符号 [email protected],该符号在函数 _main 中被引用
1>main.obj : error LNK2019: 无法解析的外部符号 [email protected],该符号在函数 _main 中被引用
1>main.obj : error LNK2019: 无法解析的外部符号 [email protected],该符号在函数 _main 中被引用
1>main.obj : error LNK2019: 无法解析的外部符号 [email protected],该符号在函数 _main 中被引用

因为按照第一步来的时候,建立的是win32项目,而现在系统、mysql使用的就均是x64的,改成x64即可,操作步骤如下:
.项目->属性->配置管理器
活动解决方案平台,下拉选新建,出现一个新的对号框,在键入选择新平台中选择X64
学习自这里

之后可以写一个简单的c程序测试一下是否成功

#include "winsock.h"  
#include "iostream"  
#include "mysql.h"  
#pragma comment(lib, "ws2_32.lib")  
#pragma comment(lib, "libmysql.lib")  
using namespace std;  

void main()  
{  
    MYSQL mydata;  

    mysql_library_init(0,NULL,NULL);//初始化MySQL C API库  
    mysql_init(&mydata);//初始化mydata的数据结构,mydata是MYSQL对象  
    mysql_options(&mydata,MYSQL_SET_CHARSET_NAME,"gbk");//连接选项:添加GBK字符集支持  

    //连接函数  
    if(mysql_real_connect(&mydata,"localhost","root","1234","demo", 3306, 0, 0) != NULL)  
        cout<<"database connection OK!"<<endl;  
}  

这里注意一下,mysql_real_connect函数中的几个参数(&mydata,”localhost”,”root”,”1234″,”demo”,
3306, 0,
0),一般就需要改2,3,4,5几个参数即可,分别为数据库位置,用户名,密码,待连接的数据库名称

如果代码中出现#include
“stdafx.h”报错:ERROR,无法打开源文件…,参见这里
主要是由于这个头文件属于预编译头文件,如果在创建项目时候没有告诉VS相关信息,当然不认识这是什么东西了。

#error : Building MFC application with /MD[d] (CRT dll version)
requires MFC shared dll version. Please #define _AFXDLL
c++ fatal error C1083: 无法打开预编译头文件:“.\Debug\router.pch”

记录一下自己使用中的相关问题,方便有同样问题的同学解决。
关于在VS中的各种配置,看这里,不过需要注…

C++操作mysql数据库,操作mysql数据库

今天下午闲着没事干,组长让我熟悉下C++连接数据库,并对其进行操作,整个过程还算顺利,为了记忆和下次使用,现把整个过程记录下来:

1.安装mysql

2.建立C++控制台程序,新建CPP源文件,如:sqlconn.cpp

3.在工程项目中属性->c/C++->常规->附加包含目录中添加mysql安装目录中的MySQL\MySQL\MySQL
Server 5.7\include

图片 1

  4.添加库目录

图片 2

 5.添加依赖项” libmysql.lib”

 图片 3

6.将运行平台改为X64(这步很重要,不然编译时会报错 )

图片 4

图片 5

图片 6

7.在源文件中加入头文件:

#include <winsock.h> //注意顺序,要放在mysql.h前
#include <mysql.h>//控制台项目中要在mysql.h之前include
<winsock.h>

8.编写自己的数据库操作程序

示例:

void test1()
{
 MYSQL *pConn;
 pConn = mysql_init(NULL);
 //第2、3、4、5参数的意思分别是:服务器地址、用户名、密码、数据库名,第6个为mysql端口号(0为默认值3306)
 if(!mysql_real_connect(pConn,”localhost”,”root”,”root”,”test”,0,NULL,0))
 {  
  printf(“无法连接数据库:%s”,mysql_error(pConn));
  return;
 }
 mysql_query(pConn,”set names
gbk”);//防止乱码。设置和数据库的编码一致就不会乱码
 //SET NAMES x 相当于 SET character_set_client = x;SET
character_set_results = x;SET character_set_connection = x;
 //写set character set gbk;查询不会乱码,但是参数化插入会报错。而set
names gbk则都不会乱码

 //mysql_real_query比mysql_query多了个参数: 字符串query的长度,
所以适合有二进制数据的query,
而mysql_query的字符串query不能包含二进制,因为它以\0为结尾
 //mysql_query()
不能传二进制BLOB字段,因为二进制信息中的\0会被误判为语句结束。
mysql_real_query() 则可以。
 if(mysql_query(pConn,”select * from persons”))
 {
  printf(“查询失败:%s”,mysql_error(pConn));
  return;
 }

 //mysql_store_result是把查询结果一次性取到客户端的离线数据集,当结果比较大时耗内存。
 //mysql_use_result则是查询结果放在服务器上,客户端通过指针逐行读取,节省客户端内存。但是一个MYSQL*连接同时只能有一个未关闭的mysql_use_result查询
 MYSQL_RES *result = mysql_store_result(pConn);
 MYSQL_ROW row;
 while(row = mysql_fetch_row(result))
 {
  printf(“%s %s\n”,row[1],row[2]);
 }

 mysql_free_result(result);
 mysql_close(pConn);
}

9.将mysq目录….. \MySQL\MySQL Server 5.7\lib
下的libmysql.dll放到生成的exe目录下,编译执行即可。

 

参考:

1.

2.

 

今天下午闲着没事干,组长让我熟悉下C++连接数据库,并对其进行操作,整个过程还算顺利,为了记忆…

今天下午闲着没事干,组长让我熟悉下C++连接数据库,并对其进行操作,整个过程还算顺利,为了记忆和下次使用,现把整个过程记录下来:

1.安装mysql

2.建立C++控制台程序,新建CPP源文件,如:sqlconn.cpp

3.在工程项目中属性->c/C++->常规->附加包含目录中添加mysql安装目录中的MySQL\MySQL\MySQL
Server 5.7\include

图片 7

  4.添加库目录

图片 8

 5.添加依赖项” libmysql.lib”

 图片 9

6.将运行平台改为X64(这步很重要,不然编译时会报错

图片 10

图片 11

图片 12

7.在源文件中加入头文件:

#include <winsock.h>
//注意顺序,要放在mysql.h前
#include
<mysql.h>//控制台项目中要在mysql.h之前include
<winsock.h>

8.编写自己的数据库操作程序

示例:

void test1()
{
 MYSQL *pConn;
 pConn = mysql_init(NULL);
 //第2、3、4、5参数的意思分别是:服务器地址、用户名、密码、数据库名,第6个为mysql端口号(0为默认值3306)
 if(!mysql_real_connect(pConn,”localhost”,”root”,”root”,”test”,0,NULL,0))
 {  
  printf(“无法连接数据库:%s”,mysql_error(pConn));
  return;
 }
 mysql_query(pConn,”set names
gbk”);//防止乱码。设置和数据库的编码一致就不会乱码
 //SET NAMES x 相当于 SET character_set_client = x;SET
character_set_results = x;SET character_set_connection = x;
 //写set character set gbk;查询不会乱码,但是参数化插入会报错。而set
names gbk则都不会乱码

 //mysql_real_query比mysql_query多了个参数: 字符串query的长度,
所以适合有二进制数据的query,
而mysql_query的字符串query不能包含二进制,因为它以\0为结尾
 //mysql_query()
不能传二进制BLOB字段,因为二进制信息中的\0会被误判为语句结束。
mysql_real_query() 则可以。
 if(mysql_query(pConn,”select * from persons”))
 {
  printf(“查询失败:%s”,mysql_error(pConn));
  return;
 }

 //mysql_store_result是把查询结果一次性取到客户端的离线数据集,当结果比较大时耗内存。
 //mysql_use_result则是查询结果放在服务器上,客户端通过指针逐行读取,节省客户端内存。但是一个MYSQL*连接同时只能有一个未关闭的mysql_use_result查询
 MYSQL_RES *result = mysql_store_result(pConn);
 MYSQL_ROW row;
 while(row = mysql_fetch_row(result))
 {
  printf(“%s %s\n”,row[1],row[2]);
 }

 mysql_free_result(result);
 mysql_close(pConn);
}

9.将mysq目录….. \MySQL\MySQL Server 5.7\lib
下的libmysql.dll放到生成的exe目录下,编译执行即可。

 

参考:

1.

2.

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图