Muchos estamos acostumbrados a utilizar bases de datos en PHP pero cuando se trata de un programa de escritorio almacenamos los cambios en archivos sin contemplar esta posibilidad.
Usar una base de datos puede ser un gran aliado a la hora de hacer aplicaciones que almacenen gran cantidad de información o vayamos a acceder desde varios puntos a dicha información (programas multipuesto, por ejemplo).
También es de gran utilidad si construimos un software que haga más ligeras ciertas tareas dentro de un servidor web (necesitamos la posibilidad de ejecutar programas sobre el servidor y tal vez de compilarlos allí, pero es una opción bastante buena, en ocasiones un script puede ejecutarse de forma demasiado lenta.
El código que muestro a continuación es capaz de crear una base de datos, una tabla dentro de ella e introducir información si la base de datos no se encuentra. Si se encuentra la base de datos, listaremos la información que hay dentro de la tabla.
Aunque se pueden utilizar funciones y excepciones he preferido no hacerlo para el código de ejemplo, ¡eso es cosa vuestra!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | #include <mysql++/mysql++.h> #include <iostream> using namespace std; int main (){ mysqlpp::Connection conn(false); char server[] = "localhost"; char user[] = "root"; // O cualquier usuario char pass[] = "a9b8c7d6e5"; if (conn.connect(NULL, server, user, pass)) { // string consulta = "select * from ins_institutos"; string consulta="SHOW DATABASES"; mysqlpp::Query query = conn.query(consulta); if (mysqlpp::StoreQueryResult res = query.store()) { cout << "Bases de datos encontradas: "<<res.num_rows()<<endl; if (res.num_rows() > 0) { bool poesiadb=false; // cout <<res[0]["nombre"] << endl; for (mysqlpp::StoreQueryResult::iterator it=res.begin(); it!=res.end(); ++it) { if ((it)->at(0)=="poesiadb") { poesiadb=true; break; } // Si queremos visualizar las bases de datos... cout <<"Base de datos: "<< (it)->at(0) << endl; // Se puede hacer con (*it)[0] pero la documentación dice que es más lento } if (poesiadb) { // Miramos los contenidos de la tabla cout << "La base de datos se encuentra" << endl; query.reset(); query<<"SELECT * FROM `poesiadb`.`test`"; res=query.store(); if (res.num_rows() >0) { for (mysqlpp::StoreQueryResult::iterator it=res.begin(); it!=res.end(); ++it) { for (unsigned i=0; i<res.num_fields(); i++) cout <<res.field_name(i)<<" = "<< (it)->at(i) << endl; // Se puede hacer con (*it)[0] pero la documentación dice que es más lento cout << endl; } } else cout << "No se han obtenido datos" << endl; } else { // Lo construimos todo cout << "Creando base de datos" << endl; if (conn.create_db("poesiadb")) { cout << "Seleccionando base de datos" << endl; if (conn.select_db("poesiadb")) { cout << "Creando tabla" << endl; query.reset(); query=conn.query("CREATE TABLE IF NOT EXISTS `poesiadb`.`test` (" "`id` bigint(20) NOT NULL AUTO_INCREMENT," "`blog` varchar(100) NOT NULL," "`url` varchar(255) NOT NULL," "PRIMARY KEY (`id`)" ") ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;"); if (query.execute()) { query.reset(); query << "INSERT INTO `test` VALUES (NULL, 'Poesia binaria', 'https://poesiabinaria.net/');"; if(!query.execute()) cout << "Fallo al introducir datos"<<endl; query.reset(); query << "INSERT INTO `test` VALUES (NULL, 'Clase 911', 'http://clase911.com/');"; if(!query.execute()) cout << "Fallo al introducir datos"<<endl; query.reset(); query << "INSERT INTO `test` VALUES (NULL, 'Ubuntizados', 'http://ubuntizados.com/');"; if(!query.execute()) cout << "Fallo al introducir datos"<<endl; } else cout << "Error al crear tabla"<<endl; } else cout << "Fallo al seleccionar la base de datos" << endl; } else cout << "Fallo al crear base de datos" << endl; } } else cout << "Fallo al obtener bases de datos" << endl; } conn.disconnect(); } else cout <<"Fallo al conectarse a la BD: "<<conn.error()<<endl; } |
De cara a compilar esto, primero necesitaremos la biblioteca libmysql++, que en sistemas derivados de Debian podemos descargar así:
$ sudo apt-get install libmysql++ libmysql++-dev
Una vez descargado e instalado, para compilar el ejemplo debemos hacer:
$ g++ -o mysqlpp mysqlpp.c -lmysqlpp -I /usr/include/mysql++/ -I /usr/include/mysql
Hay muchos más ejemplos en la documentación o en el paquete de libmysql++-doc (depende de la distribución).
Actualización diciembre 2015: he colocado una preciosa foto de cabecera en el post
Foto: Mikhail Pavstyuk (Unsplash)
Pingback: Bitacoras.com /
Pingback: BlogESfera.com /
Hace años hice una aplicacion de c++ con acceso a base de datos de MS Access, pero de MySql no la habia hecho.
Saludos
@pmike
Gracias por tu comentario
Me ha servido mucho tu ejemplo, y eso q ya han pasado años :). Gracias.