✧(≖ ◡ ≖✿
目录
MySQL链接
初始化 MYSQL*
链接
MySQL表操作
增删改
☆查
本文介绍了MySQL C API的基本使用流程:通过mysql_init初始化连接,mysql_real_connect建立数据库连接;使用mysql_query执行增删改查操作;查询时用mysql_store_result获取结果集,mysql_fetch_row逐行读取数据,mysql_fetch_fields获取字段信息,实现对表数据的完整操作。代码示例清晰,适合初学者学习。
MySQL链接
初始化 MYSQL*
MYSQL *mysql_init(MYSQL *mysql);MYSQL *my = mysql_init (nullptr); if(nullptr==my) { fprintf(stderr, "连接失败: %s\n", mysql_error(my)); return 1; }mysql_init(NULL)里的NULL是传给mysql_init()的参数,表示由 MySQL 库自己分配MYSQL结构体内存,而不是复用你传入的已有内存。
链接
MYSQL *mysql_real_connect( MYSQL *mysql, // 结构体 const char *host, // 主机名/IP const char *user, // 用户名 const char *passwd, // 用户密码 const char *db, // 连接的数据库 unsigned int port, // MySQL 端口号,如 8080 const char *unix_socket, // nullptr unsigned long client_flag // 0 );// 链接mysql if(nullptr==mysql_real_connect (my, host, user, password, db, sqlPort, nullptr,0)) { fprintf(stderr, "连接失败: %s\n", mysql_error(my)); return 2; }MySQL表操作
query:询问
int mysql_query(MYSQL *mysql, const char *query);int n = mysql_query (my, "insert stu(name) values('张三')"); if(n != 0) { fprintf (stderr, "query failed:%s\n", mysql_error (my)); return 3; }增删改
在query参数直接输入即可
//增删改 const char *inser = "insert stu(name) values('张三')"; // delete from 表名 定位条件(一定要跟定位条件否则删除整张表) const char *del = "delete from stu where name='Jack'"; // update 表名 set 列名=新值 定位条件 const char *up = "update stu set name='李四' where name='张三'";//不要把表名stu忘了 int n = mysql_query (my, sqlcomd); if(n != 0) { fprintf (stderr, "query failed:%s\n", mysql_error (my)); return 3; }☆查
MYSQL_RES *mysql_store_result(MYSQL *mysql);返回的res是:获取query中select存储到MYSQL*结构体中的信息。
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result); MYSQL_FIELD *mysql_fetch_fields(MYSQL_RES *result);mysql_fetch_row
行访问使用"游标",每次调用在传入的result参数内记录调用情况相当于迭代器,因此需要在循环体内部。
mysql_fetch_fields
这是列的一次性全部返回。我们常使用mysql_fetch_fields来获取列名、列类型、能不能为null等信息。
// 查 const char *sel = "select* from stu"; int n = mysql_query (my, sel); if(n != 0) { fprintf (stderr, "query failed:%s\n", mysql_error (my)); return 3; } // 获取query中select存储到MYSQL*结构体中的信息mysql_store_result MYSQL_RES *res = mysql_store_result (my); if(res == nullptr) { fprintf (stderr, "mysql_store_result failed:%s\n", mysql_error (my)); return 4; } int rows = mysql_num_rows (res); int fields = mysql_num_fields (res); //内容 // MYSQL_FIELD* field = mysql_fetch_field (res); // 一次返回一个与列一致 // 头行列名打印 MYSQL_FIELD *field = mysql_fetch_fields (res); //一次性全部返回 for (int i = 0; i < fields;i++) { cout << field[i].name << "\t"; } cout << endl; // 剩余行内容 for (int i = 0; i < rows;i++) { MYSQL_ROW row = mysql_fetch_row (res); for (int j = 0; j < fields;j++) { cout << row[j] << "\t"; } cout << endl; }感谢支持,长期连载
欢迎关注