使用c语言连接数据库
c语言连接数据库
我们可以去mysql官网去下载mysql提供的客户端,使用C API来连接和操作数据库
下载好之后把压缩包弄进linux中
然后用tar命令解包,
item就是我解包后给目录修改的名字,你里面的东西和我不一样没关系,这个不重要,主要是,里面得有include和lib这两个目录,有这两个目录我们就可以使用mysql的头文件和动态库
我们要使用mysql的动态库和头文件,那就需要在编译的时候指定编译选项-I 指定头文件查找目录,-L指定库文件查找目录,-l指定链接的库
mysql的C语言接口介绍
1、mysql_int
MYSQL * mysql_init(MYSQL *mysql)
一般是MYSQL *mfp = mysql_init(NULL)获得一个MYSQL句柄
2、mysql_real_connect
MYSQL *
mysql_real_connect(MYSQL *mysql,const char *host,const char *user,const char *passwd,const char *db,unsigned int port,const char *unix_socket,unsigned long client_flag)
mysql:前面mysql_init创建的句柄,使用mysql_real_connect来进行初始化
host:mysqld服务器的ip
user:用户名
db:要操作的数据库
port:mysqld服务器的监听端口
后面两个参数直接为nullptr和0即可
3、mysql_query
int mysql_query(MYSQL *mysql, const char *q);
q: sql语句,可以是增删查改中的任何一种,甚至begin、commit这些也不在话下
mysql_query的返回值是0那么就是成功,如果返回值是其他那就是出错
假如是增删改这种sql语句,执行了也就执行了,我们只需要通过返回值看看是否执行成功,不要出错,但是如果是查,那返回值哪怕是执行成功,我们也无法得到查询结果呀,所以下面的函数全部都是为查询结果而生的
4、mysql_store_result
MYSQL_RES *mysql_store_result(MYSQL *mysql);
使用mysql_query进行select后,查询结果会保存进MYSQL中,我们可以用mysql_store_result来将查询结果弄到MYSQL_RES中
5、mysql_num_rows
my_ulonglong mysql_num_rows(MYSQL_RES *res);
获取结果行数
6、mysql_num_fields
unsigned int mysql_num_fields(MYSQL_RES *res);
获取字段数,也就是列数
7、mysql_fetch_fields
MYSQL_FIELD *mysql_fetch_fields(MYSQL_RES *res);
返回字段数组的第一个元素MYSQL_FIELD的地址
typedef struct st_mysql_field {char *name; /* 字段名 */char *org_name; /* 原始字段名(如有别名) */char *table; /* 字段所属的表名 */char *org_table; /* 原始表名(如有别名) */char *db; /* 字段所属的数据库名 */char *catalog; /* 目录名(通常为 "def") */char *def; /* 默认值(如果有) */unsigned long length; /* 字段长度(定义时的长度) */unsigned long max_length; /* 查询结果中的最大长度 */unsigned int name_length;unsigned int org_name_length;unsigned int table_length;unsigned int org_table_length;unsigned int db_length;unsigned int catalog_length;unsigned int def_length;unsigned int flags; /* 字段标志(如 NOT_NULL_FLAG) */unsigned int decimals; /* 小数位数(用于数值类型) */unsigned int charsetnr; /* 字符集编号 */enum enum_field_types type; /* 字段类型(如 MYSQL_TYPE_VARCHAR) */void *extension;
} MYSQL_FIELD;
8、mysql_fetch_row
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);
示例代码:
#include <iostream>
#include <mysql.h>
#include <string>const std::string host="192.168.217.132";
const std::string user = "connector";
const std::string password="Aa123456.";
const std::string database="conn";
int port=3306;int main()
{//std::cout<<"mysql version:"<<mysql_get_client_info()<<std::endl;MYSQL* mysql=mysql_init(nullptr);mysql_real_connect(mysql,host.c_str(),user.c_str(),password.c_str(),database.c_str(),port,nullptr,0);if(mysql==nullptr){std::cout<<"连接数据库失败"<<std::endl;}else{std::cout<<"连接数据库成功"<<std::endl;}mysql_query(mysql,"select * from user;");MYSQL_RES* res=mysql_store_result(mysql);int rows= mysql_num_rows(res);int clos= mysql_num_fields(res);MYSQL_FIELD* fields =mysql_fetch_fields(res);for(int i=0;i<clos;i++){std::cout<<fields[i].name<<" ";}std::cout<<std::endl;for(int i=0;i<rows;i++){MYSQL_ROW row= mysql_fetch_row(res);for(int j=0;j<clos;j++){std::cout<<row[j]<<" ";}printf("\n");}mysql_close(mysql);return 0;
}