C++链接MySQL

在以前的项目中,发现工程是基于C++的,可是代码中数据库的链接却基于C api接口,主要接口以下:mysql

mysql_init
mysql_real_connect
mysql_query
mysql_close

包括初始化,创建链接,执行查询操做以及关闭等等,能够看出,这实际上是纯C接口,更适合C代码下的数据库链接。 可是习惯了JAVA下数据库链接处理方式的我,仍是喜欢create_conn, create_statement, stmt.execute的一系列方式,那么MySQL是否有支持相似JAVA的数据库链接呢?
有! C++ MySQL Connector官方资源下载及示例文档sql

连接中给予了不一样操做系统,不一样位数CPU下C++ Connector的RPM安装包以及示例文档,一看就会,很是的easy。数据库

我基于C++ MySQL Connector实现了一个简单的数据库链接池,能够像使用JAVA同样,进行数据库链接访问。 我本身编写的示例以下:api

DBConnPool* db_conn_pool = DBConnPool::GetInstance();
db_conn_pool->InitDBConnPool("username", "passwd",  
"tcp://*.11.*.1*:3306", 10, 20);
sql::Connection* conn = db_conn_pool->GetConn();
sql::Statement *stmt = conn->createStatement();
stmt->execute("use vip_download");
const std::string mysql= "select tx_id, tx_puburl from trans_mgr";
sql::ResultSet *res = stmt->executeQuery(mysql);

while (res->next()) 
{
  cout << "taskid = " << res->getInt(1) << endl; 
  cout << "taskpuburl = " << res->getString("tx_puburl") << endl;
}

delete res;
delete stmt;
db_conn_pool->ReleaseConn(conn);

有了链接池,我只须要跟DBConnPool要数据库链接便可,全部针对数据库表的操做以及对业务层提供的接口放到DBUtil中便可。而业务层的代码只须要GetData, SetData便可。将代码进行分层,业务层的代码能够清晰不少。tcp

另一个好处是: 读取数据是,不须要再作字符串转各类类型的工做; 在初始化sql语句时,能够经过各类set设置参数,不须要经过sprintf来生成SQL; 要简单不少,也不易出错。url

若是有大量相似操做,可使用PreparedStatement提升效率:操作系统

sql::PreparedStatement  *prep_stmt =  conn->prepareStatement(YOUR_SQL);
for(ObjectMap::iterator cacheIter = ObjectMap.begin(); cacheIter != ObjectMap.end(); cacheIter++)
		{
			prep_stmt->setString(cacheIter->first);
			prep_stmt->setInt(taskID);
			prep_stmt->execute();
		}

个人理解是经过将SQL语句预先编译,将变量经过set操做替换进去便可。无需每次从新编译。code

相关文章
相关标签/搜索