C++连接Mysql数据库

1.概述

C++连接Mysql数据库可以通过以下方法:

第一种方法是利用ADO连接,

第二种方法是利用mysql自己的api函数进行连接。

本次主要介绍第二种方法。

2.下载安装Mysql

   mysql下载地址: https://dev.mysql.com/downloads/;安装这里不进行介绍。

    如果已经安装mysql,但是缺少连接支持库,只需下载库即可。下载地址:

    https://dev.mysql.com/downloads/connector/

3.创建Vs工程,添加设置工程属性

扫描二维码关注公众号,回复: 183672 查看本文章

    项目选择属性,进入C/C++ => 常规 => 附加包含目录,添加D:\你的mysql安装目录或者库目录\include

        


属性页,进入链接器 => 常规 => 附加库目录,添加D:\你的mysql安装目录或者库目录\lib



将libmysql.lib 直接拖入工程中。

4.测试程序

// mysql_t.cpp : 定义控制台应用程序的入口点。
//


#include "stdafx.h"
#include "iostream"
#include <stdio.h>  
#include <WinSock.h>  //一定要包含这个,或者winsock2.h  
#include "mysql.h"   
#include <Windows.h>  
#include <string>
#include <memory>
//#include <boost\serialization\singleton.hpp>
#pragma comment(lib,"wsock32.lib")  
#pragma comment(lib,"libmysql.lib")  
using namespace std;


class CSqlHelper
{
public:
CSqlHelper()
{
Init();
}
~CSqlHelper()
{
FreeConnect();
}


public:
void Init()
{
mysql_init(&m_mysql);  //连接mysql,数据库  
}
bool ConnectDatabase();     //函数声明  
void FreeConnect();  
bool QueryDatabase1();  //查询1  
bool QueryDatabase2();  //查询2  
bool InsertData(const char* strSql);  
bool ModifyData(const char* strSql);  
bool DeleteData(const char* strSql); 
public:
MYSQL m_mysql; //mysql连接  
MYSQL_FIELD *fd;  //字段列数组  
char field[32][32];  //存字段名二维数组  
MYSQL_RES *res; //这个结构代表返回行的一个查询结果集  
MYSQL_ROW column; //一个行数据的类型安全(type-safe)的表示,表示数据行的列  
char query[150]; //查询语句  
};
typedef shared_ptr<CSqlHelper> CSqlHelperPtr;


int _tmain(int argc, _TCHAR* argv[])
{
CSqlHelperPtr mysql(new CSqlHelper());
if(!mysql->ConnectDatabase())
{
cout<<"连接数据库失败!"<<endl;
}
return 0;
}


//连接数据库  
bool CSqlHelper::ConnectDatabase()  
{  
    //返回false则连接失败,返回true则连接成功  
    if (!(mysql_real_connect(&m_mysql,"localhost", "root", "123456", "databasename", 3306, NULL,0))) //中间分别是主机,用户名,密码,数据库名,端口号(可以写默认0或者3306等),可以先写成参数再传进去  
    {  
        printf( "Error connecting to database:%s\n",mysql_error(&m_mysql));  
        return false;  
    }  
    else  
    {  
        printf("Connected...\n");  
        return true;  
    }  
}  
//释放资源  
void CSqlHelper::FreeConnect()  
{  
    //释放资源  
    mysql_free_result(res);  
    mysql_close(&m_mysql);  
}  


/***************************数据库操作***********************************/  
//其实所有的数据库操作都是先写个sql语句,然后用mysql_query(&mysql,query)来完成,包括创建数据库或表,增删改查  
//查询数据  
bool CSqlHelper::QueryDatabase1()  
{  
    sprintf(query, "select * from user"); //执行查询语句,这里是查询所有,user是表名,不用加引号,用strcpy也可以  
    mysql_query(&m_mysql,"set names gbk"); //设置编码格式(SET NAMES GBK也行),否则cmd下中文乱码  
    //返回0 查询成功,返回1查询失败  
    if(mysql_query(&m_mysql, query))        //执行SQL语句  
    {  
        printf("Query failed (%s)\n",mysql_error(&m_mysql));  
        return false;  
    }  
    else  
    {  
        printf("query success\n");  
    }  
    //获取结果集  
    if (!(res=mysql_store_result(&m_mysql)))    //获得sql语句结束后返回的结果集  
    {  
        printf("Couldn't get result from %s\n", mysql_error(&m_mysql));  
        return false;  
    }  
  
    //打印数据行数  
    printf("number of dataline returned: %d\n",mysql_affected_rows(&m_mysql));  
  
    //获取字段的信息  
    char *str_field[32];  //定义一个字符串数组存储字段信息  
    for(int i=0;i<4;i++)   //在已知字段数量的情况下获取字段名  
    {  
        str_field[i]=mysql_fetch_field(res)->name;  
    }  
    for(int i=0;i<4;i++)   //打印字段  
        printf("%10s\t",str_field[i]);  
    printf("\n");  
    //打印获取的数据  
    while (column = mysql_fetch_row(res))   //在已知字段数量情况下,获取并打印下一行  
    {  
        printf("%10s\t%10s\t%10s\t%10s\n", column[0], column[1], column[2],column[3]);  //column是列数组  
    }  
    return true;  
}  
bool CSqlHelper::QueryDatabase2()  
{  
    mysql_query(&m_mysql,"set names gbk");   
    //返回0 查询成功,返回1查询失败  
    if(mysql_query(&m_mysql, "select * from user"))        //执行SQL语句  
    {  
        printf("Query failed (%s)\n",mysql_error(&m_mysql));  
        return false;  
    }  
    else  
    {  
        printf("query success\n");  
    }  
    res=mysql_store_result(&m_mysql);  
    //打印数据行数  
    printf("number of dataline returned: %d\n",mysql_affected_rows(&m_mysql));  
    for(int i=0;fd=mysql_fetch_field(res);i++)  //获取字段名  
        strcpy(field[i],fd->name);  
    int j=mysql_num_fields(res);  // 获取列数  
    for(int i=0;i<j;i++)  //打印字段  
        printf("%10s\t",field[i]);  
    printf("\n");  
    while(column=mysql_fetch_row(res))  
    {  
        for(int i=0;i<j;i++)  
            printf("%10s\t",column[i]);  
        printf("\n");  
    }  
    return true;  
}  
//插入数据  
bool CSqlHelper::InsertData(const char* strSql)  
{  
    //sprintf(query, "insert into user values (NULL, 'Lilei', 'wyt2588zs','[email protected]');"); 
    if(mysql_query(&m_mysql, strSql))        //执行SQL语句  
    {  
        printf("Query failed (%s)\n",mysql_error(&m_mysql));  
        return false;  
    }  
    else  
    {  
        printf("Insert success\n");  
        return true;  
    }  
}  
//修改数据  
bool CSqlHelper::ModifyData(const char* strSql)  
{  
    //sprintf(query, "update user set email='[email protected]' where name='Lilei'");  
    if(mysql_query(&m_mysql, strSql))        //执行SQL语句  
    {  
        printf("Query failed (%s)\n",mysql_error(&m_mysql));  
        return false;  
    }  
    else  
    {  
        printf("Insert success\n");  
        return true;  
    }  
}  
//删除数据  
bool CSqlHelper::DeleteData(const char *strSql)  
{  
    /*sprintf(query, "delete from user where id=6");*/  
   // char query[100];  
    //printf("please input the sql:\n");  
   // gets(query);  //这里手动输入sql语句  
    if(mysql_query(&m_mysql, strSql))        //执行SQL语句  
    {  
        printf("Query failed (%s)\n",mysql_error(&m_mysql));  
        return false;  
    }  
    else  
    {  
        printf("Insert success\n");  
        return true;  
    }  
}  


猜你喜欢

转载自blog.csdn.net/pzhw520hchy/article/details/79430114
今日推荐