C与数据库的交互

图片还没有哦

首先附上百度文库的链接
c语言连接mysql数据库的实现方法

  • 首先要在项目下修改属性
    图片还没有哦
    图片还没有哦

这样就设置好了 然后进行代码的书写 写完之后我们编译运行 结果会报一大堆错误
图片还没有哦

依照下面改终于还是改好了没有报错了
图片还没有哦

c++ 链接mysql:error LNK2019: 无法解析的外部符号

本以为终于好了 结果又来一个报错
图片还没有哦

把安装路径下的MySQL Server 5.7\liblibmysql.dll 放在x64的项目工程里和exe一个目录下即可解决问题
正确解决 应用程序无法正常启动(0xc000007b)的问题

然后就可以使用C脚本进行对数据库的操作了

附MySQL的API接口:
| API | 作用 |
| — | —- ||
| mysql_affected_rows() | 返回被最新的UPDATE, DELETE或INSERT查询影响的行数 |
| mysql_close() | 关闭一个服务器连接 |
| mysql_connect() | 连接一个MySQL服务器。该函数不推荐;使用mysql_real_connect()代替 |
| mysql_change_user() | 改变在一个打开的连接上的用户和数据库 |
| mysql_create_db() | 创建一个数据库。该函数不推荐;而使用SQL命令CREATE DATABASE |
| mysql_data_seek() | 在一个查询结果集合中搜寻一任意行 |
| mysql_debug() | 用给定字符串做一个DBUG_PUSH |
| mysql_drop_db() | 抛弃一个数据库。该函数不推荐;而使用SQL命令DROP DATABASE |
| mysql_dump_debug_info() | 让服务器将调试信息写入日志文件 |
| mysql_eof() | 确定是否已经读到一个结果集合的最后一行。这功能被反对; mysql_errno()或mysql_error()可以相反被使用 |
| mysql_errno() | 返回最近被调用的MySQL函数的出错编号 |
| mysql_error() | 返回最近被调用的MySQL函数的出错消息 |
| mysql_escape_string() | 用在SQL语句中的字符串的转义特殊字符 |
| mysql_fetch_field() | 返回下一个表字段的类型 |
| mysql_fetch_field_direct () | 返回一个表字段的类型,给出一个字段编号 |
| mysql_fetch_fields() | 返回一个所有字段结构的数组 |
| mysql_fetch_lengths() | 返回当前行中所有列的长度 |
| mysql_fetch_row() | 从结果集合中取得下一行 |
| mysql_field_seek() | 把列光标放在一个指定的列上 |
| mysql_field_count() | 返回最近查询的结果列的数量 |
| mysql_field_tell() | 返回用于最后一个mysql_fetch_field()的字段光标的位置 |
| mysql_free_result() | 释放一个结果集合使用的内存 |
| mysql_get_client_info() | 返回客户版本信息 |
| mysql_get_host_info() | 返回一个描述连接的字符串 |
| mysql_get_proto_info() | 返回连接使用的协议版本 |
| mysql_get_server_info() | 返回服务器版本号 |
| mysql_info() | 返回关于最近执行得查询的信息 |
| mysql_init() | 获得或初始化一个MYSQL结构 |
| mysql_insert_id() | 返回有前一个查询为一个AUTO_INCREMENT列生成的ID |
| mysql_kill() | 杀死一个给定的线程 |
| mysql_list_dbs() | 返回匹配一个简单的正则表达式的数据库名 |
| mysql_list_fields() | 返回匹配一个简单的正则表达式的列名 |
| mysql_list_processes() | 返回当前服务器线程的一张表 |
| mysql_list_tables() | 返回匹配一个简单的正则表达式的表名 |
| mysql_num_fields() | 返回一个结果集合重的列的数量 |
| mysql_num_rows() | 返回一个结果集合中的行的数量 |
| mysql_options() | 设置对mysql_connect()的连接选项 |
| mysql_ping() | 检查对服务器的连接是否正在工作,必要时重新连接 |
| mysql_query() | 执行指定为一个空结尾的字符串的SQL查询 |
| mysql_real_connect() | 连接一个MySQL服务器 |
| mysql_real_query() | 执行指定为带计数的字符串的SQL查询 |
| mysql_reload() | 告诉服务器重装授权表 |
| mysql_row_seek() | 搜索在结果集合中的行,使用从mysql_row_tell()返回的值 |
| mysql_row_tell() | 返回行光标位置 |
| mysql_select_db() | 连接一个数据库 |
| mysql_shutdown() | 关掉数据库服务器 |
| mysql_stat() | 返回作为字符串的服务器状态 |
| mysql_store_result() | 检索一个完整的结果集合给客户 |
| mysql_thread_id() | 返回当前线程的ID |
| mysql_use_result() | 初始化一个一行一行地结果集合的检索 |

C++ 连接Mysql的两种方法–ADO/Mysql api
查看mysql数据库是否存在某张表及某张表是否存在某个字段
附上本次例子的代码
C_interaction_MySQL.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//C语言与MySQL数据库的交互
#ifndef _C_interaction_MySQL_
#define _C_interaction_MySQL_

#include<string.h>
#include<stdio.h>
#include<stdlib.h>


//执行sql语句
void execute_sql(char* sql);

//执行sql语句 并打印查询结果
void query_sql_result(char* sql);

#endif

C_interaction_MySQL.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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#include "C_interaction_MySQL.h"
#include "WinSock2.h"
#include "windows.h"
#include "mysql.h"

// 定义一些数据库连接需要的宏
#define HOST_OR_IP "localhost" //主机名或IP
#define PORT 3355 //端口
#define USERNAME "root" //用户名
#define PASSWORD "root" //密码
#define DATABASE "test" //连接数据库

void execute_sql(char* sql)
{
MYSQL my_connect; //数据库的连接

int res; // 执行sql语句后的返回标志

//初始化mysql连接my_connect
mysql_init(&my_connect);

//连接检查是否真的连接成功
if (!mysql_real_connect(&my_connect, HOST_OR_IP, USERNAME, PASSWORD, DATABASE, PORT, NULL, NULL))
{
printf("连接失败");
system("pause");
return;
}
else
{
printf("连接成功 \n");

// 设置查询编码为utf8 这个支持中文
mysql_query(&my_connect, "set names utf8");

// 执行sql语句
res = mysql_query(&my_connect, sql);
if (res != 0)
{
//关闭连接
mysql_close(&my_connect);
printf("执行失败");
system("pause");
return;
}
else
{
printf("执行成功 \n");
//mysql_affected_rows 返回受影响的行数
printf("%d 行受到影响 \n", mysql_affected_rows(&my_connect));
//关闭连接
mysql_close(&my_connect);
}
}
}

void query_sql_result(char* sql)
{
MYSQL my_connect; //数据库的连接

int res; //执行sql语句后的返回标志

MYSQL_RES * res_ptr; //查询结果的指针

MYSQL_FIELD * field; // 子段结构体指针

MYSQL_ROW result_row; //按行返回的查询信息

int row, column; //查询返回的行和列

int i, j; // 只是控制循环的两个变量

// 初始化连接
mysql_init(&my_connect);

//连接检查是否真的连接成功
if (!mysql_real_connect(&my_connect, HOST_OR_IP, USERNAME, PASSWORD, DATABASE, PORT, NULL, NULL))
{
printf("连接失败");
system("pause");
return;
}
else
{
printf("连接成功 \n");

// 设置查询编码为utf8 这个支持中文
mysql_query(&my_connect, "set names utf8");

// 执行sql语句
res = mysql_query(&my_connect, sql);
if (res != 0)
{
//关闭连接
mysql_close(&my_connect);
printf("执行失败");
system("pause");
return;
}
else
{
printf("执行成功 \n");
//mysql_affected_rows 返回受影响的行数
printf("%d 行受到影响 \n", (mysql_affected_rows(&my_connect) == -1 ? 0 : mysql_affected_rows(&my_connect)));

res_ptr = mysql_store_result(&my_connect);
if (res_ptr) //取得结果
{
column = mysql_num_fields(res_ptr);
row = mysql_num_rows(res_ptr) + 1;

printf("查询到的 %d 行 \n", row - 1);

//输出结果的字段名
for (i = 0; field = mysql_fetch_field(res_ptr); ++i)
{
printf("%s \t", field->name);
}

printf("\n");
//按行输出结果
for (int i = 1; i < row; ++i)
{
result_row = mysql_fetch_row(res_ptr);
for (j = 0; j < column; ++j)
{
printf("%s \t", result_row[j]);
}
printf("\n");
}
}

//关闭连接
mysql_close(&my_connect);
}
}
}

main.c

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "C_interaction_MySQL.h"

void main()
{
// "select t.table_name from information_schema.TABLES t where t.TABLE_SCHEMA ='test' and t.TABLE_NAME ='tablename';"; //查询一个表是否存在
char* aa = "create table test(id INT NOT NULL AUTO_INCREMENT, name VARCHAR(10) NOT NULL, age INT NOT NULL, PRIMARY KEY(id)) ENGINE = InnoDB; "; //创建表
execute_sql(aa);

char* exe_sql = "insert into test(id,name,age) values(null,456,789);"; //插入一条数据
execute_sql(exe_sql);

char* query = "select * from test where id = 1;"; //查询数据
query_sql_result(query);

system("pause");
return;
}

本次项目github.rar)

本文标题:C与数据库的交互

文章作者:游戏人生

发布时间:2019年04月22日 - 16:04

最后更新:2020年12月27日 - 12:12

原始链接:http://www.tjl-myblog.cn/C与数据库的交互.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

-------------本文结束感谢您的阅读-------------