`
hn67
  • 浏览: 79986 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

c++ 简单封装mysql数据库连接类 实例

    博客分类:
  • c++
 
阅读更多

在c++开发过程中,我们可能会用到mysql数据库,这边我简单写了一个类似PHP封装的mysql类,希望能帮助像我这样的C++初学者。

首先我们要安装mysql c++ 库下载地址

http://dev.mysql.com/downloads/connector/cpp/

我的环境是centos5.5

安装完毕后 看代码:

 

 

#include "mysql_connection.h"
#include <cppconn/driver.h>
#include <cppconn/exception.h>
#include <cppconn/resultset.h>
#include <cppconn/statement.h>
#include <cppconn/prepared_statement.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
class mysql_database
{
        private:
                string  db_host;
                string  db_name;
                string  db_user;
                string  db_passwd;
                string  db_charset;
                string  db_port;

                sql::Driver *driver;
                sql::Connection *con;
                sql::Statement *stmt;
                sql::ResultSet *result;

        public:
                mysql_database(map<string,string> &conf) :
                        driver(NULL),con(NULL),stmt(NULL),result(NULL)
                {
                        db_host=conf["db_host"];
                        db_name=conf["db_name"];
                        db_user=conf["db_user"];
                        db_passwd=conf["db_passwd"];
                        db_port=conf["db_port"];
                        db_charset=conf["db_charset"];

                }
                sql::Connection  *db_connect(string database="")
                {
                        try{
                                string db;
                                db=(database=="")?db_name:database;
                                driver = get_driver_instance();
                                //cout<<db_host<<db_port<<db_user<<db_passwd<<db_name<<endl;
                                con = driver->connect("tcp://"+db_host+":"+db_port, db_user, db_passwd);
                                con->setSchema(db);
                                this->squery("SET NAMES "+db_charset);
                                return con;
                        }
                        catch (sql::SQLException &e)
                        {
                                cout << "# ERR: SQLException in " << __FILE__;
                                cout << "(" << __FUNCTION__ << ") on line "<< __LINE__ << endl;
                                cout << "# ERR: " << e.what();
                                cout << " (MySQL error code: " << e.getErrorCode();
                                cout << ", SQLState: " << e.getSQLState() << " )" << endl;
                        }

                }

                /**
                * simple query for  create/update/delete
                * @param string sql
                * @return bool  TRUE OR FALS
                */
                bool squery(string sql)
                {
                        stmt = con->createStatement();
                        return stmt->execute(sql);
                }
                sql::ResultSet *query(string sql)
                {
                        stmt = con->createStatement();
                        result=stmt->executeQuery(sql);
                        return result;
                }
                /* retrieve the row count in the result set */
                int get_total(sql::ResultSet *result)
                {
                        int total;
                        total=result->rowsCount();
                        return total;
                }
                /**
                * fetch query rows
                * @param result
                * @param field          the db table's field for this query
                * @return mutil_map     
                */
                map<int,map<string,string> > fetch_map(sql::ResultSet *result,map<string,string>field)
                {
                        /* fetch the data : retrieve all the rows in the result set */
                        map<int,map<string,string> > data;
                        map<string,string>::iterator  it;
                        int k=0;
                        if((!field.empty())&&(field.size()>0))
                        {
                                while(result->next())
                                {
                                        map<string,string> row;
                                        for ( it=field.begin() ; it!=field.end() ;it++ )
                                                row[it->first]=result->getString(it->second);
                                        data[k]=row;
                                        k++;
                                }
                        }

                        return data ;

                }

};

 

用法如下:

 

#include<iostream>
#include<string>
#include<stdlib.h>
#include<map>
#include <boost/date_time.hpp>
#include "mysql_database.h"
#include "parase_ini.h"
using namespace boost;
using namespace std;
int main()
{
        parase_ini conf("config.ini");
        map<string,string> config=conf.get_config();
        mysql_database db (config);
        db.db_connect();
        sql::ResultSet * rs;
        map<string,string> field ;
        field["0"]="v_name" ;//
        rs=db.query("select v_name  from  pi_data  limit 1 ");
        map<int,map<string,string> > rows;
        rows=db.fetch_map(rs,field);
        map<int,map<string,string> >::iterator  it;
        for (it=rows.begin();it!=rows.end();it++)
        {
                map<string,string>::iterator item;
                map<string,string> content;
                content=it->second;
                for (item=content.begin();item!=content.end();item++)
                {
                        cout<<item->second<<endl;
                }
        }
        //----------- db2 start -----------
        db.db_connect("df17db");
        field["0"]="username";
        field["1"]="name";
        rs=db.query("select *  from zhuna_admin");
        rows=db.fetch_map(rs,field);
        for (it=rows.begin();it!=rows.end();it++)
        {
                map<string,string>::iterator item;
                map<string,string> content;
                content=it->second;
                string str;
                for (item=content.begin();item!=content.end();item++)
                {
                        //cout<<item->second<<endl;
                        str+=item->second+"\t";
                }
                str+="\n";
                cout<<str<<endl;
        }
        //------------ db2 end ---------------



}


说明 :上面的用法可能有其他模块 ,同学们看数据库调用就行 了。

 

 

分享到:
评论

相关推荐

    sqlite数据库c++类封装,及源码实例,boost多线程

    这不仅是一个学习SQLite和C++封装的好例子,也是提升多线程编程技能的宝贵资源。 总结来说,这个项目涉及的知识点主要包括: 1. SQLite数据库的基础操作,如创建表、插入数据、查询数据等。 2. C++类的封装技术,将...

    C++ 封装的MYSQL 类

    总的来说,C++封装的MYSQL类是为了简化与MySQL数据库的交互,提供了一种高效、易于管理的方式来执行SQL语句,特别是在处理多条SQL时。这种封装方式不仅提高了代码的可读性和可维护性,也使得数据库操作更加安全,...

    MySQL数据库操作类的实现与应用C++源代码程序小实

    接下来,我们需要创建一个C++类,该类封装了与MySQL数据库交互的基本操作,如连接、查询、插入、更新和删除。这个类可能包含以下方法: 1. `connect(const string& host, const string& user, const string& ...

    c++链接mysql数据库类

    首先,C++ Connector/MYSQL库提供了一系列的类和函数,例如`MYSQL`、`MYSQL_RES`、`MYSQL_ROW`等,用于执行SQL查询、处理结果集和管理数据库连接。在给定的资源中,包含了一个头文件和一个cpp源文件,这可能是一个...

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

    在讨论C++利用MySQL API连接和操作数据库实例的详细步骤前,首先需要对涉及的关键知识点进行解释和阐述。 首先,C++连接和操作MySQL数据库有多种方式,其中包括了ADO、ODBC和直接使用MySQL API。ADO是一种基于COM的...

    MySQL数据库操作MFC封装类

    总的来说,这个MFC封装类提供了一个用户友好的接口,使得C++开发者在MySQL数据库上进行CRUD操作(创建、读取、更新、删除)更加简单。通过事务处理和回滚功能,可以确保数据一致性,特别是在需要执行一系列相互依赖...

    c++ mysqlhelper 数据库访问层功能封装

    本篇文章将深入探讨如何使用C++封装一个名为`mysqlhelper`的数据库访问层,该层为MySQL数据库的访问提供了简洁且跨平台的解决方案。 `mysqlhelper`类封装了对MySQL数据库的基本操作,如连接、查询、执行SQL语句、...

    简单封装的Mysql类(C++)

    这个封装类主要目标是使C++开发者能够更便捷地进行MySQL数据库的操作,包括连接数据库、执行SQL语句、获取结果集、断开连接等。通过这个类,开发者可以避免直接与C API打交道,减少出错的可能性,并提高代码的可读性...

    C++MYSQL API封装类及应用例子

    封装MySQL API到C++类中,通常会包含以下核心部分: 1. **连接管理**:封装`mysql_init()`、`mysql_real_connect()`和`mysql_close()`函数,以创建、初始化和关闭数据库连接。例如,可以创建一个名为`Database...

    c++连接mysql 例子和类

    下面将详细讲解如何在C++中连接MySQL,包括使用示例代码和类封装。 首先,为了使用MySQL Connector/C++,你需要在你的项目中包含必要的头文件,并确保已经正确安装了该库。安装后,库文件通常位于`&lt;mysql-connector...

    c++面向对象实现数据库连接的网吧管理系统

    在本文中,我们将深入探讨如何使用C++的面向对象编程技术来实现一个与数据库连接的网吧管理系统,特别是在结合Visual Studio(VS)和MySQL数据库的情况下。首先,我们需要理解面向对象编程的基本概念,然后介绍如何...

    Visual C++ 6.0数据库开发实例详解

    《Visual C++ 6.0数据库开发实例详解》是一本专为初学者和有一定经验的开发者设计的指导书籍,旨在帮助读者深入理解如何利用Visual C++ 6.0这一经典编程环境进行数据库应用的开发。这本书的核心内容围绕着C++与...

    MySQL API连接数据库

    在VC6.0环境下,我们可以利用MFC(Microsoft Foundation Classes)库来构建C++应用程序,并通过MySQL API实现对MySQL数据库的连接、查询和其他操作。以下是关于这个主题的详细知识: 1. **MySQL API介绍** - MySQL...

    VS2015操作MySQL简单封装类

    总结来说,"VS2015操作MySQL简单封装类"是指在VS2015环境下,使用C++编程语言创建一个类库,该库能够方便地连接到MySQL数据库并执行常见的数据库操作。通过这样的封装,开发者可以更专注于业务逻辑,而不是底层...

    c++ 数据库开发实例

    MySQL C++ Connector是MySQL官方提供的C++库,用于连接MySQL数据库。它封装了C API,并提供了一套面向对象的接口,简化了数据库操作。使用这个库,开发者可以直接在C++代码中创建数据库连接,执行SQL查询,处理结果...

    自己封装的MySql类

    总的来说,这个自封装的MySQL类是C语言或C++环境下使用ODBC连接数据库的一个实例,它的优势在于能够跨数据库系统工作,只需要针对ODBC进行编程,而不需要了解每个数据库的具体接口。这对于需要在多数据库环境中工作...

    Mysql.rar_C MYSQL_C++ 访问 mysql_c# mysql_c++ mysql_mysql c++

    这些类通常会封装MySQL的API函数,如`mysql_connect`、`mysql_query`、`mysql_fetch_row`等,提供更高级别的抽象。而在`MysqlOperate.cpp`中,将实现这些类的方法,包括数据库连接的建立、SQL语句的执行以及结果的...

    mysql封装类

    MySQL封装类是面向对象编程中对MySQL数据库操作的一种抽象,旨在简化数据库的连接、查询、事务处理等操作。在C++编程中,这样的封装通常包括一个或多个类,如`Mysql`,它包含了与MySQL数据库交互所需的方法。在本...

    c++封装mysql接口

    本篇文章将深入探讨如何在C++中封装MySQL接口,并通过一个名为"test"的简单调用示例进行解释。 首先,我们需要了解C++中的面向对象编程(OOP)概念,这是封装的基础。在C++中,封装意味着将数据和操作这些数据的...

    C++对MYSQL数据库的链接与操作

    在C++编程中,连接和操作MySQL数据库是一个常见的任务,特别是在开发桌面应用程序时。本教程将专注于使用Visual Studio 2008 (VS2008) IDE进行C++与MySQL数据库的交互。首先,我们需要确保已经安装了必要的库和驱动...

Global site tag (gtag.js) - Google Analytics