一、环境准备
1. 已安装MySQL服务器和客户端
2. 发环境已配置MySQL C Connector
1. Linux: sudo apt-get install libmysqlclient-dev
2. Windows: 在MySQL安装目录中包含libmysql.lib
二、数据库准备(一下使用的是Linux系统)
1. 创建用户 tom(创建数据库bank为例)
sudo mysql
create database bank;
create user tom@'%' identified by '123456';
2. 授权 tom 访问数据库 bank 中所有的数据对象
grant all on bank.* to tom@'%';
3. 验证用户能否连接(以上做好后输入这个命令,在输入设置的密码就能进入,该用户无法创建数据库,)
mysql -u tom -p
4. 如果需要所有权限
-- 授予全部权限
GRANT ALL PRIVILEGES ON bank.* TO 'tom'@'%';
FLUSH PRIVILEGES;
-- 或者只授予部分权限(更安全)
GRANT SELECT, INSERT, UPDATE, DELETE ON bank.* TO 'tom'@'%';
FLUSH PRIVILEGES;
三、连接数据库
1. 修改 mysql 配置文件,允许远程连接,若服务IP为 127.0.0.1 本地回环地址,不能远程连接
sudo netstat -tpnl | grep mysql
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
进入mysqld.cnf中改为 bind_address= 0.0.0.0
2. 重启服务后,在编译程序时就能输入命令连接数据库
sudo service mysql restart
sudo systemctl restart mysql
3. 编写C程序(连接数据库示例)
// my.c
// 标准库: /usr/include
// 第三方库: /usr/include/mysql
#include<stdio.h>
#include<mysql/mysql.h>
int main(int argc, char const *argv[])
{
// 数据库连接
MYSQL *conn;
//初始化新的数据库连接,若资源不足初始换化失败NULL
conn = mysql_init(NULL);
if(!conn){
// file 打印输出
fprintf(stderr,"初始化错误:%s\n",mysql_error(conn));
return 1;
}
//输入自己设置的参数
char *host = "127.0.0.1";
char *user = "tom";
char *passwd = "123456";
char *db = "bank";
int port = 3306;
// 连接数据库
if(!mysql_real_connect(conn,host,user,passwd,db,port,NULL,0)){
fprintf(stderr,"连接失败:%s\n",mysql_error(conn));
mysql_close(conn);
return 1;
}
printf("连接成功\n");
// 初始化成功,则必须释放资源
mysql_close(conn);
return 0;
}
四、数据库函数的使用
1. MySQL API
结构体
- MYSQL 数据库连接,
- MYSQL_RES result 结果集,查询返回的多行数据构成的内存结构
- MYSQL_ROW 一行记录,字符串数组,row[0],row[1],row[n-1]
- MYSQL_ROWS 由 MYSQL_ROW 构成的链表
函数
- `mysql_init` 初始化数据库连接,没有连接
- `mysql_close` 释放数据库连接
- `mysql_error` 显示错误信息,字符串显示
- `mysql_real_connect` 建立数据库连接,TCP套接字
- `mysql_query` 执行SQL语句:insert,update,delete,select
- `mysql_store_result` 加载select结果集,使用缓存,
- `mysql_use_result` 加载select结果集
- `mysql_free_result` 释放结果集
- `mysql_num_rows` 结果集中的元数据:行数
- `mysql_num_fields` 结果集中的元数据:列数
- `mysql_fetch_row` 从结果集获得一行数据
- `mysql_insert_id` 获得插入记录的自动生成ID
以上为部分函数及功能详情可见 MYSQL API
2.程序的编译
//my.c为文件名
gcc my.c -o my -I/usr/include/mysql -L/usr/lib/mysql -lmysqlclient