MySQL使用C语言查询
MySQL使用C语言查询
常用api
MYSQL *mysql_init(MYSQL *mysql)
功能: 分配或初始化MYSQL对象。
参数:mysql
待初始化的MYSQ对象,将对象地址传入,NULL指针,该函数将分配、初始化、并返回新对象。否则,将初始化对象,并返回对象的地址。
用法实例:
MYSQL mysql;
mysql_init(&mysql); // 或者MYSQL*mysql = mysql_init(NULL);
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 前面一个函数的返回的mysql实例句柄。host 要连接的数据库的主机,可以是ip地址或主机名。user 表示登录数据库的用户名,passwd 登录的密码。db 就是访问的数据库。port: mysql的tcp/ip端口默认是3306。unix_socket 表示连接类型。client_flag 暂时为0即可。(一般win下后两个参数为NULL,0)
int mysql_query(MYSQL *mysql,const char *query)
功能:根据query查询语句执行查询数据库
参数: mysql: mysql的实例。query: 查询语句字符串可以是 增删修查
返回值: 成功返回0,失败返回非0
MYSQL_RES *mysql_store_result(MYSQL *mysql)
功能:得到查询的结果集,对于成功检索了数据的每个查询(SELECT、SHOW、DESCRIBE、EXPLAIN、CHECK TABLE等),必须调用mysql_store_result()或mysql_use_result()
参数:mysql:前面的mysql实例
返回值:成功返回MYSQL_RES结构体,该结构体中保存查询的结果
unsigned int mysql_num_fields(MYSQL_RES *result)
参数:前面返回的结果地址;
返回结果集中的行数。
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)
功能:mysql_store_result得到的结果结构中提取一行,并把它放到一个行结构中。
返回值:下一行的一个MYSQL_ROW结构当数据用完或发生错误时返回null
void mysql_free_result(MYSQL_RES *result)
释放由mysql_store_result()、mysql_use_result()、mysql_list_dbs()等为结果集分配的内存。完成对结果集的操作后,必须调用mysql_free_result()释放结果集使用的内存。
void mysql_close(MYSQL *mysql)
关闭前面打开的连接。
综上 返回值 若是指针,NULL表示失败, 其他表示成功
若是整形,0表示成功,其他表示失败;
示例
#include "mysql.h"
#include<iostream>
using namespace std;
int main(){
MYSQL sql;
mysql_init(&sql);
MYSQL_ROW row;
if (mysql_real_connect(&sql, "localhost", "root", "root", "mydatabase", 3306, NULL, 0)) //连接到mysql
{
cout << "\n\t-----MySQL已连接----" << endl;
}
if (!mysql_query(&sql, "select * from student")) //若查询成功返回0,失败返回随机数
{
cout << "\n\t ----查询成功----" << endl;
}
MYSQL_RES * rs = mysql_store_result(&sql); //将查询到的结果集储存到result中
int num = mysql_num_fields(rs); //将结果集列数存放到num中
while ((row = mysql_fetch_row(rs))) //遇到最后一行,则中止循环
{
for (int i = 0; i < num; i++) //利用for循环,输出该行的每一列
{
cout << row[i]<< "\t"; //row是MYSQL_ROW变量,可以当做数组使用,i为列数
}
cout << endl;
}
mysql_free_result(rs); //释放结果集所占用的内存
mysql_close(&sql); //关闭与mysql的连接
system("pause");
return 0;
}
g++编译命令
g++ main.cpp -o main -I D:/compiler/mysql-8.0.27-winx64/include libmysql.dll
需要将lib下的 libmysql.dll文件放到项目文件夹下;
g++ main.cpp -o main 直接将mian.cpp编译成main.exe
-L 要链接的库所在目录
-l 指定链接时需要的动态库,隐含命名规则,即在前加lib,在后加.dll确定库文件名
例:libmysql.dll
-lmysql 或直接用libmysql.dll
-I 要链接的头文件目录
示例:
g++ main.cpp -o main -I D:/compiler/mysql-8.0.27-winx64/include libmysql.dll