mysql c++开发实例_mysql c++ jdbc 示例

这是一个关于如何使用C++连接MySQL数据库的示例,包括建立连接、设置SSL选项、执行SQL操作如更新和查询,并处理异常。通过JdbcHelper类实现数据库交互。
摘要由CSDN通过智能技术生成

#include "JdbcHelper.h"#includeJdbcHelper::JdbcHelper(const std::string& host, const std::string& username, const std::string& passwd, const std::string&database)

{this->host =host;this->username =username;this->passwd =passwd;this->database =database;this->conn =NULL;try{this->driver =get_driver_instance();

}catch (sql::SQLException &e) {this->printSQLException(e, "get_driver_instance");

}if (driver ==NULL) {

std::cout<< "driver is null" <<:endl>

}

}

JdbcHelper::~JdbcHelper()

{

}int JdbcHelper::jdbc_connect(boolenableSSL)

{if (NULL !=conn) {return -1;

}this->m_enableSSL =enableSSL;try{

sql::ConnectOptionsMap opts;

opts["hostName"] = this->host;

opts["userName"] = this->username;

opts["password"] = this->passwd;if(enableSSL) {//默认使用SSL

}else{

opts["OPT_SSL_MODE"] =sql::SSL_MODE_DISABLED;

}

opts["OPT_RECONNECT"] = sql::ConnectPropertyVal(true);this->conn = driver->connect(opts);if (NULL ==conn) {

printf("conn id null\n");return -2;

}//选择数据库

sql::SQLString catalog(this->database);

conn->setSchema(catalog);return 0;

}catch (sql::SQLException &e) {this->printSQLException(e, "connect");

}return -3;

}intJdbcHelper::jdbc_close_connect()

{if(conn) {

conn->close();deleteconn;

conn=NULL;return 0;

}return -1;

}boolJdbcHelper::jdbc_is_connected()

{if(conn) {return (conn->isClosed() == false);

}else{this->jdbc_connect(m_enableSSL);

}return false;

}int JdbcHelper::jdbc_set_auto_commit(boolauto_commit)

{if (NULL == conn || conn->isClosed()) {

printf("jdbc conn is closed\n");return -1;

}try{

conn->setAutoCommit(auto_commit);return 0;

}catch (sql::SQLException &e) {this->printSQLException(e, "setAutoCommit");

}return -2;

}intJdbcHelper::jdbc_commit()

{if (NULL == conn || conn->isClosed()) {

printf("jdbc conn is closed\n");return -1;

}try{

conn->commit();return 0;

}catch (sql::SQLException &e) {this->printSQLException(e, "commit");

}return -2;

}

sql::Savepoint* JdbcHelper::jdbc_save_point(const std::string&name)

{if (NULL == conn || conn->isClosed()) {

printf("jdbc conn is closed\n");returnNULL;

}try{

sql::SQLString savePointName(name);return conn->setSavepoint(savePointName);

}catch (sql::SQLException &e) {this->printSQLException(e, "setSavepoint");

}returnNULL;

}int JdbcHelper::jdbc_rollback_save_point(sql::Savepoint*point)

{if (NULL == conn || conn->isClosed()) {

printf("jdbc conn is closed\n");return -1;

}if (NULL ==point) {return -2;

}try{

conn->rollback(point);return 0;

}catch (sql::SQLException &e) {this->printSQLException(e, "rollback");

}return -3;

}int JdbcHelper::jdbc_release_save_point(sql::Savepoint*point)

{if (NULL == conn || conn->isClosed()) {

printf("jdbc conn is closed\n");return -1;

}if (NULL ==point) {return -2;

}int rc = -1;try{

conn->releaseSavepoint(point);

rc= 0;

}catch (sql::SQLException &e) {this->printSQLException(e, "releaseSavepoint");

rc= -3;

}deletepoint;returnrc;

}intJdbcHelper::jdbc_executeUpdate(const std::string&sql,

std::functionprepCallBack,

std::functionexceptionCallBack)

{if (NULL == conn || conn->isClosed()) {

printf("jdbc conn is closed\n");return -1;

}int row_affected = -1;

sql::PreparedStatement* stmt =NULL;try{do{

sql::SQLString sqlString(sql);

stmt= conn->prepareStatement(sqlString);if (NULL ==stmt) {

row_affected= -2;break;

}

sql::ParameterMetaData* paramMetaData = stmt->getParameterMetaData();if(paramMetaData) {if (paramMetaData->getParameterCount() > 0) {if(prepCallBack) {

prepCallBack(stmt);

}

}

}

row_affected= stmt->executeUpdate(); //插入数据

} while (false);

}catch (sql::SQLException &e)

{this->printSQLException(e, sql);if(exceptionCallBack) {

exceptionCallBack(e);

}

}if(stmt) {try{

stmt->close();

}catch (sql::SQLException &e) {this->printSQLException(e, "close stmt res");

}deletestmt;

}returnrow_affected;

}intJdbcHelper::jdbc_executeQuery(const std::string&sql,

std::functionprepCallBack,

std::functionresultCallBack,

std::functionexceptionCallBack)

{if (NULL == conn || conn->isClosed()) {

printf("jdbc conn is closed\n");return -1;

}int rc = -1;

sql::PreparedStatement* prep_stmt =NULL;

sql::ResultSet* res =NULL;try{do{//std::cout << "SQL: " << sql << std::endl;

sql::SQLString sqlString(sql);

prep_stmt= conn->prepareStatement(sqlString);if (NULL ==prep_stmt) {

rc= -2;break;

}if(prepCallBack) {

sql::ParameterMetaData* paramMetaData = prep_stmt->getParameterMetaData();if (paramMetaData && paramMetaData->getParameterCount() > 0) {

prepCallBack(prep_stmt);

}

}

res= prep_stmt->executeQuery(); //查询数据

if (NULL ==res) {

rc= -3;break;

}if(resultCallBack) {

sql::ResultSetMetaData* metaData = prep_stmt->getMetaData();if (metaData && metaData->getColumnCount() > 0) {//printSQLMeta(metaData);

resultCallBack(res);

}

}

rc= 0;

}while (false);

}catch (sql::SQLException &e)

{//if (e.getErrorCode() == CR_SERVER_LOST) { }//in errmsg.h of mysqlclient

printSQLException(e, sql);if(exceptionCallBack) {

exceptionCallBack(e);

}

}if(prep_stmt) {try{

prep_stmt->close();

}catch (sql::SQLException &e) {this->printSQLException(e, "close stmt");

}deleteprep_stmt;

}if(res) {try{

res->close();

}catch (sql::SQLException &e) {this->printSQLException(e, "close stmt res");

}deleteres;

}returnrc;

}void JdbcHelper::printSQLException(sql::SQLException &e, const std::string&sql)

{

std::cout<< "message:" << e.what() <<:endl>

std::cout<< "code:" << e.getErrorCode() <<:endl>

std::cout<< "state:" << e.getSQLState() <<:endl>

std::cout<< "sql:" << sql <<:endl>

}void JdbcHelper::printSQLMeta(sql::ResultSetMetaData*metaData)

{int columnCount = metaData->getColumnCount();for (int i = 1; i <= columnCount; i++) {

std::cout<< "column:" << i << ", name:" << metaData->getColumnName(i) << ", type:" << metaData->getColumnTypeName(i) <<:endl>

}

}

在Centos7上安装mysql-connector-c++的步骤如下: 1. 首先,你需要下载mysql-connector-c++的安装包。你可以从MySQL官方网站上下载最新版本的mysql-connector-c++。 2. 下载完成后,解压安装包。你可以使用以下命令解压: ``` tar -zxvf mysql-connector-c++-<version>.tar.gz ``` 3. 进入解压后的目录: ``` cd mysql-connector-c++-<version> ``` 4. 接下来,你需要安装必要的依赖项。你可以使用以下命令安装: ``` sudo yum install mysql-connector-c++-devel ``` 5. 安装完成后,你可以开始编译和安装mysql-connector-c++。你可以使用以下命令: ``` ./configure make sudo make install ``` 6. 编译和安装完成后,你可以在你的代码中引入mysql-connector-c++的头文件,并使用相应的命名空间。例如: ``` #include <jdbc/mysql_connection.h> #include <jdbc/cppconn/driver.h> #include <jdbc/cppconn/exception.h> #include <jdbc/cppconn/resultset.h> #include <jdbc/cppconn/statement.h> #include <jdbc/cppconn/prepared_statement.h> ``` 7. 现在,你可以在你的代码中使用mysql-connector-c++来连接和操作MySQL数据库了。你可以参考mysql-connector-c++的官方文档和示例代码来学习如何使用它。 请注意,以上步骤仅适用于Centos7系统。如果你使用的是其他操作系统,请参考相应的文档来进行安装。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *3* [Centos7 安装测试MySQL Connector/C++](https://blog.csdn.net/xqs51163/article/details/123690731)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Linux CentOS 7 安装mysql的两种方式](https://blog.csdn.net/Escorts/article/details/118941623)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值