在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 ---------------
}
说明 :上面的用法可能有其他模块 ,同学们看数据库调用就行 了。
分享到:
相关推荐
本书讲解了使用Visual C++开发数据库系统的经典模块和工程实例。本书的内容分为三部分,第一部分介绍了Visual C++数据库开发的常用技巧和技术,并给出相关的学习建议。第二部分介绍了使用Visual C++开发数据库时常...
mfc连接 mysql实例 有封装的MFCmycql类 测试 和MFC操作的测试 连接数据库 创建数据库 删除库 创建数据表 删除表 写入数据 获取数据 删除 修改指定项 获取错误信息。
本书讲解了使用Visual C++开发数据库系统的经典模块和工程实例。本书的内容分为三部分,第一部分介绍了Visual C++数据库开发的常用技巧和技术,并给出相关的学习建议。第二部分介绍了使用Visual C++开发数据库时常...
Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...
Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...
运行平台:windows 编译环境:VS2013 开发语言:C++11 一个基于 Libevent 和 protobuf的C++服务器框架 采用面向对象的思想将...有mysql数据库读写方法。 附带一个客户端能够直接链接,有文件传输和消息传输实例。
在数据库处理方面,不需要在数据层借助存储过程及数据库服务器端函数封装过多的业务逻辑,因此数据库系统采用相对精巧的MySQL[6]。 该在线博客系统服务器端如果需要布置到其他主机上,则该主机必备条件如下: 1. ...
AdoDatabase为Oracle、SqlServer、mysql封装了统一的操作接口,并给出了连接实例。
10.15 连接一个正在运行的Internet Explorer实例 392 10.16 读取Microsoft Outlook Contacts 393 10.17 在Mac OS X中收集详细的系统信息 396 第11章 用户界面 400 引言 400 11.1 在文本控制台中显示进度条 402...
简单实用的DataSet更新数据库的类+总结 [ADO.NET]由数据库触发器引发的问题 为ASP.NET封装的SQL数据库访问类 DataTable.Select方法的性能问题 .NET 2.0里使用强类型数据创建多层应用 ADO.NET实用经验无保留曝光 有了...
保证一个类只有一个实例,并提供一个访问它的全局访问点 设计模式之 Factory(工厂方法和抽象工厂) 使用工厂模式就象使用 new 一样频繁. 设计模式之 Builder 汽车由车轮 方向盘 发动机很多部件组成,同时,将这些...
如,原先的mysql扩展,就是使用mysql官方的lib库进行的封装。 在本文,我们将建立一个简单的lib库,并在扩展中进行封装调用。 代码 基础代码 这个扩展,我们将在say扩展上增加call_lib_fun()。say扩展相关代码大家请...
修改核心支持库,为外部数据库的连接类命令增加参数“不显示ODBC连接对话框”。 3. 修改核心支持库,解决用“播放音乐()”播放“音频采样大小为24位”的WAV文件时产生噪音的BUG。 4. 修改编译器,可以为编译出的...