C语言操作mysql

安装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 
#include 
#include 

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即可

你可能感兴趣的:(C,数据库)