安装mysql后,在mysql下产生一个include目录和一个lib目录,include目录中存放的是头文件,lib中是动态链接库,将include/下的mysql.h复制到/usr/include,将lib/下的libmysqlclient.so和libmysqlclient.so.18复制到/usr/lib64中,编写程序需要包含mysql.h头文件,链接时加 -lmysqlclient
源代码为connect.c,这里将所有头文件放在/usr/include/mysql文件下,原理很简单,先初始化一个句柄,然后调用连接函数,传入用户名和密码,这里和名为”wz“的数据库和”wz“的表建立连接,并查询所有数据,如下:
#include <stdio.h>
#include <mysql/mysql.h>
#include <string.h>
void main()
{
MYSQL mysql;
MYSQL_RES *res = NULL;
MYSQL_ROW row;
char *query_str = NULL;
int rc, i, fields;
int rows;
/* 初始化句柄 */
if (NULL == mysql_init(&mysql))
{
printf("mysql_init() : %s\n", mysql_error(&mysql));
return;
}
/* 和数据库建立连接 */
if (NULL == mysql_real_connect(&mysql, "localhost", "root",
"123456", "wz", 0, NULL, 0))
{
printf("mysql_real_connect() : %s\n", mysql_error(&mysql));
return;
}
printf("connect mysql successful\n");
/* 设置字符集为uft8以支持中文 */
if (mysql_set_character_set(&mysql, "utf8"))
{
printf("mysql_set_character_set(): %s\n", mysql_error(&mysql));
return;
}
/* 设置查询语句 */
query_str = "select * from wz";
rc = mysql_real_query(&mysql, query_str, strlen(query_str));
if (rc != 0)
{
printf("mysql_real_query() : %s\n", mysql_error(&mysql));
return;
}
/* 接收结果 */
res = mysql_store_result(&mysql);
if (NULL == res)
{
printf("mysql_store_result(): %s\n", error(&mysql));
return;
}
/* 获取行和列 */
rows = mysql_num_rows(res);
printf("The total rows is: %d\n", rows);
fields = mysql_num_fields(res);
printf("The total fields is: %d\n", fields);
/* 循环行列打印所有属性 */
while ((row = mysql_fetch_row(res)))
{
for (i = 0; i < fields; i++)
{
printf("%s\n", row[i]);
}
printf("\n");
}
/* 断开连接 */
mysql_close(&mysql);
}
执行效果如下:
[root@1dot1dot1dot1 mysql]# ./start.sh
connect mysql successful
The total rows is: 3
The total fields is: 4
1
学习
edward
2018-09-13
9
工作
edward
2018-09-14
12
娱乐
james
2018-09-14
直接用命令行查询结果如下:
mysql> select * from wz;
+----+--------+--------+------------+
| id | title | author | date |
+----+--------+--------+------------+
| 1 | 学习 | edward | 2018-09-13 |
| 9 | 工作 | edward | 2018-09-14 |
| 12 | 娱乐 | james | 2018-09-14 |
+----+--------+--------+------------+
3 rows in set (0.02 sec)
添加删除等操作类似,调用相应api即可