vs2017 连接mysql数据库
程序员文章站
2022-03-23 08:33:36
...
学习c++连接mysqlshujuk1,看网上的教程,连接mysql数据库,需要mysql安装目录中include和lib文件夹中的头文件和库。
但是我在我的mysql安装目录中没有看到这两个文件,去看mysql的安装引导,发现我有一个东西没点,
选择第一个,一路next,修改后就能在安装包中看见这两个文件夹。
在 属性-》配置属性-》c/c++-》常规-》附加包含目录 -------添加mysql安装目录中的include文件夹
在属性-》配置属性-》链接器-》常规-》附加库目录-------添加mysql安装目录中的lib中的opt文件夹(libmysql.lib库所在的文件夹)
在 属性-》配置属性-》链接器-》输入-》附加依赖项 -------添加 libmysql.lib
测试代码:
#include "stdafx.h"
#include "winsock.h"
#include "mysql.h"
int main()
{
MYSQL * con = NULL; //= mysql_init((MYSQL*) 0);
char tmp[400];
//database configuartion
char dbuser[30] = "hu"; // 账号
char dbpasswd[30] = "123123"; // 密码
char dbip[30] = "127.0.0.1"; // mysql服务器IP
char dbname[50] = "hutest"; // 数据库名字
char *query = NULL;
int rt;//return value
con = mysql_init(con);
if (con != NULL && mysql_real_connect(con, dbip, dbuser, dbpasswd, NULL, 3306, NULL, 0)) {
if (!mysql_select_db(con, dbname)) {
printf("Select successfully the database!\n");
con->reconnect = 1;
// 设置客户端编码
query = (char*)"set names 'gb2312'";
rt = mysql_real_query(con, query, strlen(query));
if (rt) {
printf("Error making query: %s !!!\n", mysql_error(con));
}
else {
printf("query %s succeed!\n", query);
}
}
}
else {
printf("Unable to connect the database,check your configuration!\n");
}
while (true)
{
printf("请输入sql命令:\n");
//gets_s(tmp);
strcpy_s(tmp,"select * from account");
if (strcmp(tmp, "exit") == 0)
{
break;
}
//执行sql语句
rt = mysql_real_query(con, tmp, strlen(tmp));
if (rt)
{
printf("Error making query: %s !!!\n", mysql_error(con));
}
else
{
printf("%s executed!!!\n", tmp);
}
// 获取sql查询结果
MYSQL_RES *res = mysql_store_result(con); //将结果保存在res结构体中
if (res != NULL) {
///////////////////////////
printf("row_count:%d\n",res->row_count); //数据的数量
printf("lengths:%d\n", res->lengths);
printf("field_count:%d\n", res->field_count); //一项数据属性字段的数量
printf("current_field:%d\n", res->current_field);
printf("--------------------FIELD-----------------------\n");
// 获取指定位置的 属性字段数据 位置从0开始
// mysql_fetch_field_direct
MYSQL_FIELD *fields = mysql_fetch_fields(res);
for (int i = 0; i < res->field_count; i++)
{
printf("name:%s\n", fields[i].name);
printf("table:%s\n", fields[i].table);
printf("db:%s\n", fields[i].db);
}
unsigned int num_fields;
unsigned int i;
//MYSQL_FIELD *fields;
num_fields = mysql_num_fields(res);
fields = mysql_fetch_fields(res);
for (i = 0; i < num_fields; i++)
{
printf("Field %u is %s\n", i, fields[i].name);
}
printf("--------------------ROWS-----------------------\n");
// 直接从res中获取数据
MYSQL_ROWS *rows = res->data_cursor;
printf("length:%uld\n", rows->length);
printf("row num:%d\n", mysql_num_rows(res));
while (rows != NULL)
{
for (int i = 0; i < 2; i++)
{
printf("|%s",rows->data[i]);
}
printf("|\n");
rows = rows->next;
}
printf("-------------------------------------------\n");
//////////////////////////////////////////////////////////
// mysql_num_rows()来找出结果集中的行数
// mysql_field_count() 返回表的列数
// mysql_num_fields(res) 获取字段数量
// mysql_fetch_row() 来获取多行结果的一行内容
// mysql_fetch_fields()来获取表头的内容
//////////////////////////////////////////////////////////
// 一般获取查询结果的方式
MYSQL_ROW row;
int count = 0;
unsigned int t;
while (row = mysql_fetch_row(res)) {
for (t = 0; t<mysql_num_fields(res); t++) {
printf("%s ", row[t]);
}
printf("\n");
count++;
}
printf("number of rows %d\n", count);
// 释放结果集
mysql_free_result(res);
}
system("pause");
}
// 关闭连接
mysql_close(con);
system("pause");
return 0;
}
上一篇: 操作系统第四次作业--页面置换算法
下一篇: 算法第四次作业-回溯法求解作业分配问题