C++连接mysql

  1. // 使用 mysql 提供的进行数据库编程,需要保证当前的应用哦个
  2. // 程序版本(x86/x64),库文件版本和本机的数据库完全一致。需
  3. // 要将安装目录下的整个 inlcude 文件夹和 lib 路径下的
  4. // libmysql.lib 和 libmysql.dll 拷贝当当前的项目路径下
  5. #include <stdio.h>
  6. #include <windows.h>
  7. #include "include/mysql.h"
  8. #pragma comment(lib, "libmysql.lib")
  9. // 检查数据库的执行是否成功
  10. void check(MYSQL* mysql)
  11. {
  12. // mysql_errno 返回的是错误码
  13. if (mysql_errno(mysql) != 0)
  14. {
  15. // mysql_error 返回的是错误信息
  16. printf("连接数据库出错: %s\n",
  17. mysql_error(mysql));
  18. system("pause"); exit(0);
  19. }
  20. }
  21. // 向指定的表中添加数据
  22. void insert(MYSQL* mysql, LPCSTR sql)
  23. {
  24. // 直接执行添加数据的操作
  25. mysql_query(mysql, sql);
  26. // 需要检查数据是否添加成功
  27. check(mysql);
  28. }
  29. // 查询指定的数据
  30. void select(MYSQL* mysql, LPCSTR sql)
  31. {
  32. // 直接执行添加数据的操作
  33. mysql_query(mysql, sql);
  34. check(mysql);
  35. // 获取到查询的结果值
  36. MYSQL_RES* pRes = NULL;
  37. pRes = mysql_use_result(mysql);
  38. check(mysql);
  39. // 获取到查询结果有多少
  40. int nColCount = mysql_num_fields(pRes);
  41. // 输出每一列的列名
  42. MYSQL_FIELD* pField = nullptr;
  43. for (int i = 0; i < nColCount; ++i)
  44. {
  45. // 从结果中获取到每一列的名称
  46. pField = mysql_fetch_field(pRes);
  47. // 某一些情况下不存在列名不存在的就是 null
  48. if (pField == nullptr)
  49. continue;
  50. printf("%s | ", pField->name);
  51. }
  52. puts("");
  53. // 输出每一个查询到的字段
  54. MYSQL_ROW row = nullptr;
  55. while (row = mysql_fetch_row(pRes))
  56. { // 获取每一行的信息
  57. for (int i = 0; i < nColCount; ++i)
  58. { // 需要提防产生空指针的情况
  59. if (row[i] != nullptr)
  60. printf("[%s] ", row[i]);
  61. else
  62. printf("[null] ");
  63. }
  64. printf("\n");
  65. }
  66. }
  67. int main(int argc, char* argv[])
  68. {
  69. // 修改控制台的默认字符编码
  70. system("chcp 65001");
  71. // 1. 初始化 mysql 数据库
  72. mysql_library_init(argc, argv, nullptr);
  73. // 2. 操作 mysql 数据库需要提供一个 MYSQL 对象
  74. MYSQL mysql = { 0 };
  75. mysql_init(&mysql);
  76. // 3. 连接数据库,需要提供明文的数据库信息
  77. mysql_real_connect(&mysql, "127.0.0.1", "root",
  78. "66666666", "my_table", 3306, nullptr, 0);
  79. check(&mysql);
  80. // 4. 向数据库中添加信息
  81. // insert(&mysql, "INSERT INTO my_class(m_name, m_count) VALUE('41', 41);");
  82. // 5. 从数据库中查询信息
  83. select(&mysql, "SELECT * FROM my_student;");
  84. // 6. 清理 mysql 数据库
  85. mysql_library_end();
  86. return 0;
  87. }

python连接mysql

  1. import pymysql
  2. class mysql(object):
  3. # 连接到数据库
  4. def __init__(self):
  5. try:
  6. # 创建连接对象,连接到数据库
  7. self.connect = pymysql.connect(host="127.0.0.1",
  8. user="root", password="66666666", db="my_table")
  9. # 获取到游标对象,游标对象被用于执行查询操作
  10. self.cursor = self.connect.cursor()
  11. except Exception as e:
  12. # 一旦出现问题,这里会打印错误信息
  13. print(e)
  14. # 添加数据到表中
  15. def insert(self, sql):
  16. try:
  17. # 使用 execute 执行 sql 指令
  18. self.cursor.execute(sql)
  19. # 任何对 sql 数据库执行修改的操作都需要提交
  20. self.connect.commit()
  21. except Exception as e:
  22. # 如果指令执行出错,理论应该回滚操作
  23. self.connect.rollback()
  24. # 输出错误信息
  25. print(e)
  26. # 查询数据,返回查询到的数据和数量
  27. def select(self, sql):
  28. try:
  29. # 使用 execute 执行 sql 指令
  30. self.cursor.execute(sql)
  31. # 使用 fetchall 获取所有结果
  32. result = self.cursor.fetchall()
  33. # 使用 rowcount 获取返回的条目数量
  34. count = self.cursor.rowcount
  35. # 查询到的结果是一个由所有的条目组成的元组
  36. # 元组的每一个元素又是一个元组,这个元组中
  37. # 保存的是查询到的每一列的信息
  38. return count, result
  39. except Exception as e:
  40. # 如果指令执行出错,理论应该回滚操作
  41. self.connect.rollback()
  42. # 输出错误信息
  43. print(e)
  44. if __name__ == "__main__":
  45. sql = mysql()
  46. # sql.insert("INSERT INTO my_class VALUE(43, '43', 43);")
  47. print(sql.select("SELECT * FROM my_student;"))