C/C++连接mysql查询数据
Cmake
cmake_minimum_required(VERSION 3.13)
project(readMySQL)
set(CMAKE_CXX_STANDARD 14)
add_executable(readMySQL main.cpp)
set(MYSQL_HOME "C:\\Program Files\\MySQL\\MySQL Server 5.6")
include_directories(${MYSQL_HOME}\\include)
link_directories(${MYSQL_HOME}\\lib)
find_library(LIB_MYSQL NAMES libmysql PATHS ${MYSQL_HOME}\\lib)
target_link_libraries(${PROJECT_NAME} ${LIB_MYSQL})
Code
#include <winsock2.h>
#include <iostream>
#include <mysql.h>
#pragma comment(lib,"ws2_32.lib")
#pragma comment(lib,"libmysql.lib")
int main() {
MYSQL mysql;
// 初始化
mysql_init(&mysql);
// 连接
if(mysql_real_connect(&mysql,"localhost","root","123456","test",3306,NULL,0)==NULL)
{
std::cerr << "connect fail:" << mysql_errno(&mysql) << std::endl;
}
// 结果集
MYSQL_RES *mysqlRes;
// 行结果
MYSQL_ROW mysqlRow;
// 查询SQL
char sql[] = "select * from newtable";
// 查询
mysql_real_query(&mysql,sql,sizeof(sql));
// 保存查询结果
mysqlRes = mysql_store_result(&mysql);
if(mysqlRes==NULL){
std::cerr << "query fail:" << mysql_errno(&mysql) << std::endl;
exit(1);
}
// 获取字段个数
int fields = mysql_num_fields(mysqlRes);
// 获取字段信息
MYSQL_FIELD *fieldDatas = mysql_fetch_fields(mysqlRes);
// 打印字段
for (size_t i =0;i<fields;i++)
{
std::cout << fieldDatas[i].name<< "\t";
}
// 换行
std::cout << std::endl;
// 打印数据
while(mysqlRow=mysql_fetch_row(mysqlRes))
{
for (size_t i =0;i<fields;i++)
{
std::cout << mysqlRow[i]<< "\t";
}
std::cout << std::endl;
}
// 释放存储资源
mysql_free_result(mysqlRes);
// 关闭连接
mysql_close(&mysql);
return 0;
}