C++连接数据库

原创 2016年05月31日 23:35:23

连接数据库的几个API

1. MYSQL  *mysql_init(MYSQL *mysql);
 MYSQL *mysql_init(NULL); 

为mysql_real_connect()分配或初始化一个MYSQL对象,若mysql 为NULL,函数为其分配,初始化并返回一个新对象. 否则对象被初始化并返回该对象的地址.
返回值:一个被初始化了的MYSQL *handle,若内存不足返回NULL.

2.int mysql_options(MYSQL *mysql,enum mysql_option,const void *arg) 

为连接设置一些连接项,必须在mysql_init()之后,mysql_real_connect()之前使用这个函数. 具体各个参数详见百度百科

3.MYSQL *mysql_real_connect(MYSQL *mysql,const char *host,const char *user,const char* passwd,const char *db,unsigned int port,const char *unix_socket,unsigned int client_flag);    

参数的意思分别是已经初始化了的MYSQL对象,主机名,用户名,密码,数据库名,端口,unix_sock,client_flag; 在调用该函数之前,必须先调用mysql_init()初始化MYSQL结构体.

4.int mysql_query(MYSQL *mysql,const *stmt_str);
int mysql_real_query(MYSQL *mysql,unsigned long length);

mysql_query执行由stmt_str指向的SQL语句,不能执行包含二进制的SQL语句(字符”\0”是二进制数据),但mysql_real_query()指定以分号分隔的多个SQL语句. 也可以调用mysql_real_connect()或mysql_set_server_option()指定以分号分隔的多个SQL语句.
返回值:SQL语句执行成功返回0,出错返回非0;

MYSQL_RES *mysql_use_result(MYSQL *mysql);
MYSQL_RES *mysql_store_result(MYSQL *mysql);
在调用mysql_query()mysql_real_query()之后,必须调用mysql_free_result()释放结果集.初始化一个结果检索,但是并不像mysql_store_result()那样把结果集读到client,而是通过mysql_fetch_row()进行逐行检索,直到返回一个NULL.  直接从server读取,节省时间和空间.  
返回值:成功返回一个MYSQL_RES结构体,出错返回NULL
5.int mysql_next_result(MYSQL *mysql);

该函数用来在由多个SQL语句构成的单独语句字符串时执行,在每次调用该函数之前,一定要使用mysql_use_result()释放当前语句的结果集.

6.MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);

检索结果集中的下一行.

7.int mysql_num_fields(MYSQL_RES *result);

每行的值的个数可由mysql_num_fields(result)获知,如果row保存mysql_fetch_row()的返回值,则指向值的指针是row[0] to row[mysql_num_fields(result)-1];

8.void mysql_close(MYSQL *mysql);

关闭先前打开的连接,同时也释放由mysql指向的连接handle,若handle是由mysql_init() or mysql_connect()分配的.
代码如下:

mysql.h
#pragma once  //这是一个比较常用的C/C++杂注,只要在头文件中的最开始加入这条杂注,就能保证头文件只被编译一次. 
#include<string>
#include<mysql/mysql.h>   
class MySql  
{
public: 
    //构造函数用来初始化mysql和连接数据库
    MySql(const std::string iP,const std::string name,const std::string passwd,const std::string database);
    //析构函数用来做数据库的善后处理
    ~MySql();
    //对数据库进行sql操作
    bool operate(const std::string &operation);
//获取行
    MYSQL_ROW getRow(void);
//获取列数  
    int   getColNum(void);   //得到每行的列数.
    void  freeResult(void);  //
    void  print_result(void);  //打印查询结果
    bool InsertData(const std::string &operation);     //插入数据
    bool ModifyData(const std::string &operation);    //修改数据
    bool DeleteData(const std::string &operation);   //删除数据
//释放保存在该连接的操作
private:
    std::string server_ip;    //数据库地址
    std::string user_name;    //用户名
    std::string password;     //用户密码
    std::string database_name; //数据库名  
private:
    MYSQL        *mysql_conn;
    MYSQL_RES    *mysql_res;
    MYSQL_ROW    mysql_row;  
};

mysql.cpp

#include<iostream>
#include<string>
#include<mysql/mysql.h>
#include"mysql.h"
#include<stdio.h>
using namespace std;
MySql::MySql(const std::string ip,const std::string name,const std::string passwd,const std::string database)
{
    server_ip=ip;
    user_name=name;
    password=passwd;
    database_name=database;

    //初始化mysql   
    mysql_conn=mysql_init(NULL);

   //连接mysql  
    if(!mysql_real_connect(mysql_conn,server_ip.c_str(),user_name.c_str(),password.c_str(),database_name.c_str(),0,NULL,0)) //后面三个参数分别是port,unix_socket,client_flag.
    {
        std::cout<<"mysql连接失败"<<std::endl;
        exit(1);
    }else{
        cout <<"mysql连接成功"<<endl;
    }
}
//操作函数
bool MySql::operate(const std::string &operation)
{
     if(mysql_query(mysql_conn,operation.c_str()))
    {
        std::cout<<"mysql操作失败"<<std::endl;
        return false;
    }
    //将操作结果存储在结果集  
    mysql_res=mysql_use_result(mysql_conn);
    mysql_free_result(mysql_res);
    return true;
}
MYSQL_ROW  MySql::getRow(void)
{
    return mysql_fetch_row(mysql_res);
}
int MySql::getColNum(void)
{
    return mysql_num_fields(mysql_res);
}
void MySql::print_result(void)
{
    //获得每行的字段数
    int num=mysql_num_fields(mysql_res);
    //循环读取所有的行
    while((mysql_row=mysql_fetch_row(mysql_res))!=NULL){
        //将每行字段都读出来.
        for(int i=0;i<num;i++){
            cout << mysql_row[i]<<" ";
        }
        cout << endl;
    }
}
bool MySql::InsertData(const std::string &operation)
{
    if(mysql_query(mysql_conn,operation.c_str())){
        cout << "mysql操作失败!"<<endl;
        exit(1);
    }else{
        cout << "mysql连接成功"<<endl;
    }
    /*mysql_res=mysql_use_result(mysql_conn);
    mysql_free_result(mysql_res);*/
}
bool MySql::ModifyData(const std::string &operation){
    if(mysql_query(mysql_conn,operation.c_str())){
        cout << "mysql操作失败"<<endl;
        exit(1);
    }else{
        cout << "mysql连接成功"<<endl;
    }
}
bool MySql::DeleteData(const std::string &operation){
    if(mysql_query(mysql_conn,operation.c_str())){
        cout <<"mysql操作失败"<<endl;
        exit(1);
    }else{
        cout << "mysql连接成功"<<endl;
    }
}
MySql::~MySql()
{
    //释放存储结果
    mysql_free_result(mysql_res);
    //关闭mysql连接
    mysql_close(mysql_conn);
    cout << "数据库关闭成功"<<endl;
}
int main(int argc,char *argv[])
{
    MySql mysql("127.0.0.1","root","429256","zuoye3");
    //mysql.operate("select * from orders");
    //mysql.print_result();
//    mysql.InsertData("insert into yang values(NULL,'yang',21)");
    //mysql.ModifyData("update yang set name='feifei' where id=1");
     mysql.DeleteData("delete from yang where id=2");
    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

Windows下C++连接mysql数据库的方法

步骤: 1. 安装MySQL数据库 2. 项目属性页->C/C++->常规->附加包含目录:xxx\MySQL Server 5.6\include 3. 项目属性页->链接器->常规->附加库...
  • heluan123132
  • heluan123132
  • 2016年09月03日 20:19
  • 2514

C++利用MySQL API连接和操作数据库实例详解

1.C++连接和操作MySQL的方式 系列文章: MySQL 设计和命令行模式下建立详解 C++利用MySQL API连接和操作数据库实例详解 在Windows平台,我们可以使用ADO、ODB...
  • u012260238
  • u012260238
  • 2017年04月21日 19:22
  • 524

C++连接mysql数据库的两种方法(ADO连接和mysql api连接)

【原文 http://www.jb51.net/article/44262.htm 】 现在正做一个接口,通过不同的连接字符串操作不同的数据库。要用到mysql数据库,C++连接mysql有2种方法...
  • baodi_z
  • baodi_z
  • 2015年04月09日 15:02
  • 12559

C++与SQL Server2008连接及配置

SQL Server2008配置安装与C++
  • u013719984
  • u013719984
  • 2016年04月10日 13:40
  • 8019

C++访问ORACLE数据库

C++访问数据库有很多方法,网上也很多参考资料,下面使用ORACLE官方的OCCI来访问ORACLE数据库,先说基本步骤,后续再逐步完善详细的内容。 首先,参考资料是官方文档:https://docs...
  • Garfield2005
  • Garfield2005
  • 2015年12月30日 09:49
  • 5912

vs2013下c++连接mysql数据库

 本文使用的是mysql提供的api来进行连接,这样使用比较方便。 开发环境:mysql 5.6+vs2013+win8.1操作系统 步骤1: 要使用mysql的api,需要mysql安装...
  • u012074791
  • u012074791
  • 2015年06月26日 17:21
  • 2243

vc6.0下c++连接mysql数据库

一   vc6.0连接mysql数据库 (1)打开VC6.0 工具栏Tools菜单下的Options选项,在Directories的标签页中右边的“Show directories for:”下拉列...
  • lyf08600231
  • lyf08600231
  • 2013年03月11日 21:14
  • 1788

C++使用ADO连接MySql数据库

1.数据库技术发展 ODBC->DAO->RDO->ADOOLE DB   2.ADO中包含了七个对象成员          Connection用于管理数据库的连接          Co...
  • u011337769
  • u011337769
  • 2017年04月12日 19:00
  • 544

Linux c/c++访问Oracle数据库--连接数据库

上一篇中记录了开发环境的配置,这一次将会记录通过C程序访问数据库的基本例子~~ /***********************/ #include #include #includ...
  • gaogao303
  • gaogao303
  • 2013年12月16日 15:38
  • 5373

创建SQL数据库并与C++Builder连接

创建数据库并与C++Builder连接的过程分为三个步骤。一是建立数据库表,二是建立ODBC数据源,三是数据库与C++Builder连接。 一. 创建数据库表      使用工具是SQL ...
  • CYT0603
  • CYT0603
  • 2016年06月13日 18:57
  • 1716
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++连接数据库
举报原因:
原因补充:

(最多只允许输入30个字)