C语言操作MySQL数据库

1,前言

  1. 查看了下MySQL的C Connector使用方法,特记录备忘。
  2. 直接操作MySQL,输入命令效率低,将MySQL嵌入程序中,封装接口,让程序去访问MySQL,才能最大效益利用MySQL。
  3. Debian类系统安装MySQL开发包:sudo apt-get install libmysqlclient-dev

2,C语言的代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
// Windows下C语言连接操作MySQL
#include <stdio.h>
#include <winsock.h> // linux下可省略这个头文件
#include <mysql.h>

int main(int argc, char *argv[])
{
// 初始化函数
MYSQL *conn = mysql_init(NULL);

// 判断连接是否失败,如果失败输出原因
if (!mysql_real_connect(conn, "HOST", "USER", "PASSWD", "DB", 3306, 0, 0))
{
printf("Connect Error: %s", mysql_error(conn));
exit(-1);
}

// 设置编码是否失败,如果失败输出原因
// 设置编码可以解决乱码,Win32的cmd下最好设置为gbk编码,Linux可设置为utf8
if (mysql_query(conn, "SET NAMES gbk"))
{
printf("Set Names Failed: %s", mysql_error(conn));
mysql_close(conn);
exit(-1);
}


// 如果执行插入语句失败,输出原因并关闭连接然后退出
if (mysql_query(conn, "INSERT INTO account ( DATE, CR, DR, SUM, NOTE) VALUES ( CURRENT_DATE(), '1004', '3001', '5', '示例')"))
{
printf("Insert Failed: %s", mysql_error(conn));
mysql_close(conn);
exit(-1);
}
// 输出操作后有几行被改变
printf("写入行数:%ld", mysql_affected_rows(conn));


// 如果执行查询语句失败,输出原因并关闭连接然后退出
if (mysql_query(conn, "SELECT * FROM account"))
{
printf("Select Failed: %s", mysql_error(conn));
mysql_close(conn);
exit(-1);
}

// 获取离线到内存中的结果
MYSQL_RES *result = mysql_store_result(conn);
MYSQL_ROW row;

// 将查询结果取出,mysql row里面输出的都是字符串类型
while ( row = mysql_fetch_row( result ) )
{
printf("\n%s\t%s\t%s\t%s\t%s\t%s", row[0], row[1], row[2], row[3], row[4], row[5], row[6]);
}

// 释放查询结果
mysql_free_result(result);
// 关闭连接
mysql_close(conn);

return 0;
}

3,注意:

  1. 编译命令为:gcc test.c -o test.exe -IC:\Soft\Mingw64\mysql\include -LC:\Soft\Mingw64\mysql\lib -lmysql
  2. MySQL头文件目录:C:\Soft\Mingw64\mysql\include
  3. MySQL头库件目录:C:\Soft\Mingw64\mysql\lib
  4. 32位GCC只能用32位的MySQL驱动,64位亦然,否则ld会找不到libmysql