Página 6 de 7
Bien, ahora que sabemos las funciones básicas que nos permiten acceder a MySQL, podemos crear nuestro proyecto en Dev-C++, pero primero vamos a crear una base de datos para pruebas, la cual tendrá una tabla y 3 registros para poder jugar con ellos.
Creación de la base de prueba
- Abrimos el MySQL-Front y se nos presenta la ventana:
Damos click en abrir para poder ingresar, si nos pide la clave la ingresamos.
- Una vez que ingresemos damos click sobre el botón Editor SQL para que se despliegue una ventana de comandos en la cual podamos ejecutar instrucciones SQL.
En dicha ventana pegamos el siguiente código:
CREATE DATABASE base_ejemplo;
USE base_ejemplo;
CREATE TABLE personas (
id int(3) NOT NULL auto_increment,
nombre varchar(20) default NULL,
apellido varchar(20) default NULL,
edad int(3) NOT NULL default '0',
direccion varchar(40) default NULL,
PRIMARY KEY (id)
) AUTO_INCREMENT=1 ;
INSERT INTO personas(nombre, apellido, edad, direccion) VALUES('adrian', 'vaca', 25, 'Santiago 222');
INSERT INTO personas(nombre, apellido, edad, direccion) VALUES('karla', 'aguirre', 26, 'Ventimilla y 6 de diciembre');
INSERT INTO personas(nombre, apellido, edad, direccion) VALUES('pedro', 'vela', 48, '10 de Agosto y Guevara');
SELECT * FROM personas; |
Y se nos presenta la siguiente ventana:
Bien lo que hemos hecho aquí es lo siguiente:
- Creamos una base de nombre base_ejemplo con la sentencia CREATE DATABASE
- Con USE base_ejemplo establecemos la base base_ejemplo como la base actual ya que en esta vamos a ejecutar los comandos a continuación.
- Con CREATE TABLE personas creamos una tabla cuyo nombre es personas que tienen las columnas especificadas.
- Luego insertamos 3 registros en dicha tabla. Fíjense que no mencionamos a la columna id debido a que cuando definimos dicha columna al crear la tabla le pusimos el atributo auto_increment con lo cual el valor de la columna será incrementada en forma automática en 1.
- Con SELECT * FROM personas
seleccionamos todos los registros de la tabla personas y los resultados se muestran en la parte inferior de la pantalla.
Bien hemos terminado esta parte.
Creación del proyecto con Dev-C++
Los pasos como siempre son los siguientes:
- Abrimos el Dev-C++, vamos a Archivo -> Nuevo -> Proyecto, en la pestaña Basic seleccionamos Console Application y el nombre del proyecto será PruebaMySQL
Guardamos el archivo del proyecto.
- Vamos a Proyecto -> Opciones del proyecto -> Parámetros y en el cuadro Linker, escribimos -lmysql tal como se muestra a continuación:
- Ahora reemplazamos el código de la ventana por el siguiente:
/*
Name: main.cpp
Author: Salvador Pozo Coronado,
Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
Date: 07/05/2005
Description: Ejemplo para mostrar contenidos de bases de datos
usando MySQL.
*/
// Includes...
#include <iostream>
#include <windows.h>
#include <mysql/mysql.h>
#include <mysql/mysqld_error.h>
#include <cstring>
#include <cstdio>
using namespace std;
// Programa principal
int main()
{
// Variables
MYSQL *objDatos;
MYSQL_RES *res;
MYSQL_ROW row;
MYSQL_FIELD *columna;
int i, j, k, l;
unsigned long *lon;
MYSQL_ROW_OFFSET pos;
// Intentar iniciar MySQL:
if(!(objDatos = mysql_init(0))) {
// Imposible crear el objeto objDatos
cout << "ERROR: imposible crear el objeto objDatos." << endl;
rewind(stdin);
getchar();
return 1;
}
// Debe existir un usuario "root" con clave de acceso "clave"
if(!mysql_real_connect(objDatos, NULL, "root", "clave", "base_ejemplo", MYSQL_PORT, NULL, 0)) {
// No se puede conectar con el servidor en el puerto especificado.
cout << "Imposible conectar con servidor mysql en el puerto "
<< MYSQL_PORT << " Error: " << mysql_error(objDatos) << endl;
mysql_close(objDatos);
rewind(stdin);
getchar();
return 1;
}
// Conectar a base de datos.
if(mysql_select_db(objDatos, "base_ejemplo")) {
// Imposible seleccionar la base de datos, posiblemente no existe.
cout << "ERROR: " << mysql_error(objDatos) << endl;
mysql_close(objDatos);
rewind(stdin);
getchar();
return 2;
}
// Hacer una consulta con el comando "SELECT * FROM personas":
if(mysql_query(objDatos, "SELECT * FROM personas")) {
// Error al realizar la consulta:
cout << "ERROR: " << mysql_error(objDatos) << endl;
mysql_close(objDatos);
rewind(stdin);
getchar();
return 2;
}
// Almacenar el resultado de la consulta:
if((res = mysql_store_result(objDatos))) {
// Obtener el número de registros seleccionados:
i = (int) mysql_num_rows(res);
// Obtener el número de columnsa por fila:
j = (int) mysql_num_fields(res);
// Mostrar el número de registros seleccionados:
cout << "Consulta: SELECT * FROM personas" << endl;
cout << "Numero de filas encontradas: " << i << endl;
cout << "Numero de columnas por fila: " << j << endl;
// Información sobre columnas usando mysql_fetch_field:
cout << endl << "Informacion sobre columnas:" << endl;
for(l = 0; l < j; l++) {
columna = mysql_fetch_field(res);
cout << "Nombre: " << columna->name << endl;
cout << "Longitud: " << columna->length << endl;
cout << "Valor por defecto: " << (columna->def ? columna->def : "NULL") << endl;
}
cout << endl;
// Información sobre columnas usando mysql_fetch_fields:
cout << endl << "Informacion sobre columnas:" << endl;
columna = mysql_fetch_fields(res);
for(l = 0; l < j; l++) {
cout << "Nombre: " << columna[l].name << endl;
cout << "Longitud: " << columna[l].length << endl;
cout << "Valor por defecto: " << (columna[l].def ? columna[l].def : "NULL") << endl;
}
cout << endl;
// Información sobre columnas n, usando mysql_fetch_field_direct:
cout << endl << "Informacion sobre columna 1:" << endl;
columna = mysql_fetch_field_direct(res, 1);
cout << "Nombre: " << columna->name << endl;
cout << "Longitud: " << columna->length << endl;
cout << "Valor por defecto: " << (columna->def ? columna->def : "NULL") << endl;
cout << endl;
// Leer registro a registro y mostrar:
l=1;
for(l = 0; l < i; l++) {
row = mysql_fetch_row(res);
lon = mysql_fetch_lengths(res);
cout << endl << "Registro no. " << l+1 << endl;
// Mostrar cada campo y su longitud:
for(k = 0 ; k < j ; k++) {
cout << ((row[k]==NULL) ? "NULL" : row[k]);
cout << " longitud: " << lon[k] << endl;
}
}
cout << endl;
// Mostrar sólo 3ª fila:
mysql_data_seek(res, 2);
row = mysql_fetch_row(res);
cout << "Tercera fila" << endl;
for(k = 0 ; k < j ; k++) {
cout << ((row[k]==NULL) ? "NULL" : row[k]) << endl;
}
// Liberar el resultado de la consulta:
mysql_free_result(res);
}
// El mismo proceso usando mysql_use_result:
// Hacer una consulta con el comando "SELECT * FROM personas":
if(mysql_query(objDatos, "SELECT * FROM personas")) {
// Error al realizar la consulta:
cout << "ERROR: " << mysql_error(objDatos) << endl;
mysql_close(objDatos);
rewind(stdin);
getchar();
return 2;
}
// Mostrar todas las filas:
if((res = mysql_use_result(objDatos))) {
j = (int) mysql_num_fields(res);
cout << endl << endl << "Mostrando filas usando: mysql_use_result";
while(row = mysql_fetch_row(res)) {
for(k = 0 ; k < j ; k++)
cout << ((row[k]==NULL) ? "NULL" : row[k]) << endl;
}
// Liberar el resultado de la consulta:
mysql_free_result(res);
}
// Cerrar la conexión
mysql_close(objDatos);
// Esperar a que se pulse una tecla y salir.
rewind(stdin);
getchar();
return 0;
} |
Tomar en cuenta que se debe reeplazar la palabra clave por la contraseña real del usuario root.
Presionamos CTRL+S para guardar el archivo mostrado (main.cpp)
- Presionamos CTRL+F9 para compilar el programa y CTRL+F10 para ejecutarlo. El resultado será entonces mostrado en pantalla:
Deben revisar bien el código fuente y comprenderlo, aquí se trata lo escencial de operaciones con MySQL desde C++
|
Comentarios
Justo tuve ese problema, debes de incluir en tu proyecto en la parte de directorios include el include de DEVCPP.
Prueba instalar DEV c++ 4.9. Eso me funcionó
Tengo problemas con el #include de mysql, me dice que no encuentra el archivo ni el directorio y ya hice todo lo que se tenia que hacer.
Espero y puedan ayudarme, gracias.
Suscripción de noticias RSS para comentarios de esta entrada.