mysql的官方网站有对MySQL Connector/C++的文档解释和具体实例,但是大家也知道,如果把那些具体实例的代码只是生硬的套入项目工程中是万万不行的,因为项目安全性要求,需要对容错,资源创建释放问题严格关注,下面贴一个自己的方法函数,里面涵盖了相关安全处理而且对调用存储过程也有所涉及:
  1. bool CommonService::......(JSONNode& in, JSONNode& out)
  2. {
  3. /*=====校验json传入参数=====*/
  4. ..........
  5. /*=====解析json传入参数,得到安装码或者id, 安装时间, 硬盘序列号, ip,mac=====*/
  6. ..........
  7. /*=====通过安装码找到数据库中的对应记录写入传入的值=====*/
  8. /********数据库操作**********/
  9. //1.得到数据库连接
  10. Connection* con = G<ConnectionPool>().GetConnection();
  11. if (con == NULL)
  12. {
  13. LOG4CXX_ERROR(g_logger, "不能得到数据库连接");
  14. out.push_back(JSONNode(RESULT, ACTION_FALSE));
  15. out.push_back(JSONNode(ERROR_MESSAGE, "不能得到数据库连接"));
  16. return false;
  17. }
  18. int ret = 1;
  19. PreparedStatement* prep_stmt = NULL;
  20. ResultSet*         res       = NULL;
  21. try
  22. {
  23. con->setSchema(G<ConnectionPool>().GetDBName().c_str());
  24. //执行sql改变安装状态
  25. std::string sql_statement = "update tb_host set reg_date=?, sn=?, ip=?, mac=?, state=?, sync_state=? where reg_code =? and state=?";    //要执行的sql语句
  26. //事务处理
  27. con->setAutoCommit(0);
  28. prep_stmt = con->prepareStatement(sql_statement.c_str());
  29. prep_stmt->setString(1, install_time.c_str());
  30. prep_stmt->setString(2, harddrive_sn.c_str());
  31. prep_stmt->setString(3, ip_address.c_str());
  32. prep_stmt->setString(4, mac_address.c_str());
  33. prep_stmt->setInt(5, HAS_INSTALL);
  34. prep_stmt->setInt(6, HAS_SYNC);
  35. prep_stmt->setString(7, install_code.c_str());
  36. prep_stmt->setInt(8, NO_INSTALL);
  37. if(prep_stmt->executeUpdate() == 0)
  38. {
  39. ret = 2;
  40. LOG4CXX_INFO(g_logger, ".....");
  41. out.push_back(JSONNode(ERROR_MESSAGE, "....."));
  42. goto Finally_handle;
  43. }
  44. //调用赋默认策略存储过程
  45. std::string procedure = "CALL updateHostPolicyByModHost(?,?, @ret, @msg)";
  46. prep_stmt = con->prepareStatement(procedure.c_str());
  47. prep_stmt->setString(1, install_code.c_str());
  48. prep_stmt->setInt(2, 0);
  49. prep_stmt->execute();
  50. std::string query = "select @ret AS ret,@msg AS msg";
  51. prep_stmt = con->prepareStatement(query.c_str());
  52. res = prep_stmt->executeQuery();
  53. while(res->next())
  54. {
  55. if(res->getInt("ret") != 0)
  56. {
  57. LOG4CXX_ERROR(g_logger, "....." << res->getString("msg").c_str() << res->getInt("ret"));
  58. out.push_back(JSONNode(ERROR_MESSAGE, "....."));
  59. goto Finally_handle;
  60. }
  61. }
  62. con ->commit();
  63. }
  64. catch (SQLException& e)
  65. {
  66. try
  67. {
  68. con->rollback();
  69. }
  70. catch (SQLException& e)
  71. {
  72. ret = 0;
  73. LOG4CXX_ERROR(g_logger, "数据库异常" << e.what());
  74. }
  75. ret = 0;
  76. LOG4CXX_ERROR(g_logger, "数据库异常" << e.what());
  77. out.push_back(JSONNode(ERROR_MESSAGE, e.what()));
  78. }
  79. catch (...)
  80. {
  81. ret = 0;
  82. LOG4CXX_ERROR(g_logger, "其他错误");
  83. out.push_back(JSONNode(ERROR_MESSAGE, "其他错误"));
  84. }
  85. Finally_handle:
  86. DestorySql(res, prep_stmt);
  87. //将连接释放到连接池
  88. G<ConnectionPool>().ReleaseConnection(con);
  89. if (ret == 1)
  90. {
  91. out.push_back(JSONNode(RESULT, ACTION_SUCCESS));
  92. return true;
  93. }
  94. else if (ret == 2)
  95. {
  96. out.push_back(JSONNode(RESULT, ACTION_FALSE));
  97. return true;
  98. }
  99. else
  100. {
  101. out.push_back(JSONNode(RESULT, ACTION_FALSE));
  102. return false;
  103. }
  104. }
  1. /************************************************************************/
  2. /* 销毁数据库记录集资源                                                 */
  3. /************************************************************************/
  4. void CommonService::DestorySql(ResultSet* res, PreparedStatement* prep_stmt)
  5. {
  6. if (res != NULL)
  7. {
  8. try
  9. {
  10. res ->close();
  11. }
  12. catch(SQLException& e)
  13. {
  14. LOG4CXX_ERROR(g_logger, "数据库异常" << e.what());
  15. }
  16. delete res;
  17. res = NULL;
  18. }
  19. if (prep_stmt != NULL){
  20. try
  21. {
  22. prep_stmt->close();
  23. }
  24. catch(SQLException& e)
  25. {
  26. LOG4CXX_ERROR(g_logger, "数据库异常" << e.what());
  27. }
  28. delete prep_stmt;
  29. prep_stmt = NULL;
  30. }
  31. }
本文转自永远的朋友博客51CTO博客,原文链接http://blog.51cto.com/yaocoder/643004如需转载请自行联系原作者
yaocoder

MySQL Connector/C++ 接口实例相关推荐

  1. Linux MySQL Connector/C++ 编程实例

    本篇文章介绍如何在Linux平台使用Connector/C++ 连接数据库,假定MySQL已经安装完成.如果还没有安装MySQL,请先安装.MySQL版本:8.0.19 目录 1. 安装Connect ...

  2. mysql connector cpp_MySQL Connector/C++(一)

    如果我翻译错了或者翻译的不好,欢迎指正- Developing Database Applications Using MySQL Connector/C++ 这个教程会教你搭建安装MySQL Con ...

  3. Win10+Python+Django+Nginx+MySQL开发教程及实例(2)——Python连通操作MySQL

    Win10+Python+Django+Nginx+MySQL开发教程及实例 PaulTsao 本系列教程共有四篇内容: 第一篇: 开发环境搭建 第二篇:用Python连通操作MySQL 第三篇:用N ...

  4. Developing DataBase Applications Using MySQL Connector/C++ 中文文本

    日期 备注 2020年6月3日 对排版进行了调整.   翻译自mysql Connector C++帮助文档[http://download.csdn.net/detail/midle110/4931 ...

  5. mysql connector python linux_MySQL Connector/Python 安装、测试

    安装Connector/Python: # wget http://cdn.mysql.com/Downloads/Connector-Python/mysql-connector-python-1. ...

  6. python连接sqlserver_python 链接sqlserver 写接口实例

    我是使用pymssql完成的sqlserver,首先下载符合版本的pymssql的whl,然后安装,在pycharm的default setting->project Interpreter中确 ...

  7. python3 操作mysql数据库(mysql.connector 和 pymysql )

    1. PyMySQL 的使用 (1) 什么是 PyMySQL?   PyMySQL 是 Python 中用于连接 MySQL 服务器的一个库,它遵循 Python 数据库 API 规范 V2.0,并包 ...

  8. Win10+Python+Django+Nginx+MySQL开发教程及实例(1)——开发环境搭建

    Win10+Python+Django+Nginx+MySQL开发教程及实例 PaulTsao 本教程共有三篇内容: 第一篇:Win10+Python+Django+Nginx+MySQL 开发环境搭 ...

  9. mysql connector c编程_MySQL数据库之MySQL Connector 编程

    本文主要向大家介绍了MySQL数据库之MySQL Connector 编程 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. MySQL Connector 是MySQL数据库客户 ...

最新文章

  1. Windows 7环境下安装PHP 5.2.17
  2. MongoDB 的 upsert
  3. 三星I9100[4.0 固件ROM] [2012.03.15]万众期待的欧版官方4.0.3完美汉化完美教程
  4. 【JavaScript】JS事件机制学习
  5. SAP Fiori Elements 应用 manifest.json 文件里 resources.json 的含义
  6. Mac远程连接服务器
  7. 《论文笔记》Collaborative Visual Inertial SLAM for Multiple Smart Phones
  8. 理解允许定位,音频,网络电话..
  9. 亚马逊EC2根硬盘空间扩容
  10. Polygon Mesh Processing读书笔记——1三角网格Triangle Meshes
  11. 怎样教育孩子,能让孩子有更好的学习?
  12. win2003实现单用户远程登录
  13. 智能优化算法应用:基于灰狼算法的二维Otsu图像阈值分割-附代码
  14. Oracle 10G安装指导
  15. BP神经网络详解+原理
  16. MeshLab合并CC生产的分块OBJ模型
  17. 360路由器v2刷第三方固件_不走弯路:小米路由器3G 刷Padavan固件简单教程
  18. 宝塔linux 搭建rtmp+ffmpeg转流直播服务器
  19. 凯文·凯利最新演讲完整版:未来的十二个趋势
  20. 没有网络电脑计算机还能用吗,电脑连不上公用网络怎么办

热门文章

  1. 定时将应用日志移动到指定目录
  2. 《SQL Server 2012 T-SQL基础》读书笔记 - 1.背景
  3. 到底该不该从开发转测试
  4. Onpaint和OnDraw的区别
  5. 分支-03. 三天打鱼两天晒网(Switch…case)
  6. [转载] Intention scheduling for BDI agent systems
  7. 初识sparklyr—电影数据分析
  8. springboot 引入jdbc驱动_SpringBoot整合jdbc、durid、mybatis详解,数据库的连接就是这么简单...
  9. oracle导入excel字段超过4000字符数据_产品思考:B端产品中,为什么批量导入功能很重要?...
  10. 如何知道现在是否单用户模式_新手运营Shopee现在是否来得及,商品的转化如何提高?...