#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>

}

}

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐