Conexión remota C++ a la base de datos MySQL

1. Una idea

Recientemente me obsesioné con la base de datos MySQL y siento que se puede almacenar mucha información en la base de datos (es más necesario para mí con amnesia severa). Debido a que también estoy aprendiendo el lenguaje C++, pensé en usar el lenguaje C++ para operar mysql Además, mi base de datos está instalada en la computadora del laboratorio, así que pensé que sería bueno poder conectarme a mysql de forma remota. Con esta idea en mente, encontré muchas publicaciones de blog relacionadas en Internet, pero pocas de ellas satisfacían completamente mis necesidades. Pero aun hay un poco de ayuda, al menos dejame tener la idea de conectar mysql bajo vs2019, la siguiente es mi experiencia practica.
Es solo para grabar, para referencia futura y para estudiar con todos, si hay alguna inadecuación, ¡perdónenme!

2. El proceso de operación real y capturas de pantalla

2.1 Introducción de software y hardware

软件:vs2019,mysql5.7(装在另一台机器上),win10 家庭版 64位
编程语言:C++

2.2 Proceso práctico

  1. Copie los directorios include y lib en el archivo de instalación de mysql en la máquina remota a la computadora local. Por ejemplo, MySQL en mi computadora remota está instalado de forma predeterminada, por lo que el directorio de instalación es C:\Program Files\MySQL\MySQL Server 5.7, la computadora local lo copié en el directorio D:\app\mysqlCpp, y los resultados son los siguientes:
    2.2.1
  2. Abra vs2019, cree un nuevo proyecto vacío, haga clic con el botón derecho en el nombre del proyecto , seleccione propiedades , seleccione el directorio VC++ en la columna izquierda de la ventana emergente de propiedades del proyecto y agregue las rutas de las carpetas include y lib recién copiadas en el directorio include y el directorio de la biblioteca respectivamente, la captura de pantalla de la operación específica es la siguiente :
    inserte la descripción de la imagen aquí
  3. Luego haga clic en el enlazador debajo de la barra de opciones a la izquierda , seleccione entrada , ingrese libmysql.lib después de las dependencias adicionales en el marco derecho y finalmente haga clic en Aceptar. Captura de pantalla a continuación:
    inserte la descripción de la imagen aquí
  4. Finalmente, debe copiar el archivo libmysql.dll en el directorio lib copiado anteriormente al directorio raíz del proyecto.Este paso es muy importante, porque vs2019 se conecta a la base de datos remota cargando el archivo de biblioteca dinámica. La captura de pantalla es la siguiente: hasta ahora, todas las operaciones de configuración se han completado y el siguiente paso es ingresar al tema: "¡comience a escribir código para conectarse a mysql!
    inserte la descripción de la imagen aquí

2.3 Pruebas

Simplemente consulte los registros de la tabla y la salida, no hay mucho que decir, simplemente coloque el código directamente

#include <iostream>
#include <string>
#include <mysql.h>
#include<iomanip>

using namespace std;

void sqlselect(MYSQL*, const char*);     //测试查询数据 

MYSQL* mysql = NULL;

int main()
{
	//初始化MySQL连接句柄
	mysql = mysql_init((MYSQL*)0);

	mysql_real_connect
	(
		mysql,
		"10.255.60.194", //主机ip地址
		"root", //数据库用户名
		"这里输入你的root用户的密码", //数据库密码
		"要连接的库名", //数据库名称
		3306, //数据库端口,0表示默认端口(即3306)
		NULL, //如果unix_socket不是NULL,字符串指定套接字或应该被使用的命名管道。注意host参数决定连接的类型
		0 //通常是0
	);

	if (!mysql) //连接失败
	{
		cout << "Connection error: " << mysql_errno(mysql) 
			 << ", " << mysql_error(mysql) << endl;
	}

	const char* command = "select * from 表名"; //查询指令

	// 改变编码格式
	mysql_set_character_set(mysql, "GB2312");

	sqlselect(mysql, command); //查询数据  

	mysql_close(mysql); //关闭连接  

	return 0;
}

void sqlselect(MYSQL* mysql, const char* command)
{

	int flag = mysql_real_query(mysql, command, strlen(command));

	if (flag)
	{
		cout << "Select error: " << mysql_errno(mysql) << ", " << mysql_error(mysql) << endl;
		return;
	}

	MYSQL_RES* res = mysql_store_result(mysql); //读取将查询结果   
	MYSQL_FIELD* field = mysql_fetch_fields(res); //获取所有列名
	int field_count = mysql_field_count(mysql); //获取列数

												//输出所有列名
	for (int i = 0; i < field_count; i++)
		cout << setw(15) << field[i].name;

	cout << endl;

	//遍历输出每一行数据  
	MYSQL_ROW row;
	while (row = mysql_fetch_row(res))
	{
		for (int i = 0; i < field_count; i++)
			cout << setw(15) << row[i];
		cout << endl;
	}
}

Nota: ¡Este código no es original! Sin embargo, lo modifiqué un poco, ¡y se puede ejecutar directamente copiándolo!
resultado de la operación:
éxito

3. Resumen

Siento que todavía hay muchas cosas que aprender, pero finalmente completé una de mis propias ideas. Todavía disfruto todo el proceso ahora que lo pienso. Después de todo, básicamente he logrado mi objetivo. Finalmente, me gustaría gracias a estos grandes que me proporcionaron información en Internet. Aunque no me conozco, ¡tenemos un sentimiento común!
Gracias por leer, si hay algo mal, ¡bienvenido a dejar un mensaje!

Consejo: si hay un error en la conexión: ¡el servidor MySQL se ha ido!
1. Verifique si la computadora local y el servidor están conectados a Internet.
2. Verifique si la computadora remota ha abierto el servicio mysql.
3. Configure la base de datos mysql en la computadora remota para permitir la conexión remota con una contraseña. La operación específica es el siguiente:
inserte la descripción de la imagen aquí
También puede consultar: https://blog.csdn.net/golden_soft/article/details/85451604

Supongo que te gusta

Origin blog.csdn.net/dubulingbo/article/details/103208059
Recomendado
Clasificación