Este sitio está desarrollado exclusivamente por los componentes de Con Clase, cualquier error en la presente documentación es sólo culpa nuestra.
MySQL es una marca registrada por MySQL AB. Parte del material que se expone aquí, concretamente las referencias de funciones del API de MySQL y de la sintaxis de SQL, son traducciones del manual original de MySQL que se puede encontrar en inglés en www.mysql.com.
El presente manual trata sobre la integración de bases de datos MySQL dentro de aplicaciones C y C++. Para ello nos limitaremos a explicar algunas de las funciones y estructuras del API de MySQL y al modo en que estas se combinan para crear programas que trabajen con bases de datos.
Se supone que el lector de este documento ya tiene conocimientos sobre diseño de bases de datos y sobre el lenguaje de consulta SQL. De todos modos, en Con Clase también se incluye un curso sobre estos temas, al que se puede acceder desde MySQL con Clase.
También supondremos que trabajamos en un sistema que tiene instalado el servidor MySQL. Se puede consultar la documentación en la página de MySQL para obtener detalles sobre el modo de instalar este servidor en distintos sistemas operativos.
Lo que sí necesitamos es, por supuesto, un compilador de C/C++. Los ejemplos que aparecen en este curso están escritos en C++, pero usaremos el API C, de modo que las estructuras de los programas deben ser fácilmente adaptables a código C.
Nota: Aunque existe un API C++, que encapsula el API C de MySQL, de momento no se incluye documentación sobre él en este curso.
Siguiendo lo que ya es una tradición en Con Clase usaremos el compilador Mingw y el entorno de desarrollo Dev-C++ para crear nuestros programas de ejemplo. En este entorno se puede descargar un paquete para usar el API de MySQL. Veamos cómo hacerlo paso a paso:
Ahora tendremos un subdirectorio MySQL bajo el directorio include de Dev-C++, que contendrá los ficheros de cabecera ".h". En el directorio lib de Dev-C++ se habrán copiado los ficheros "libmySQL.a" y "libmySQL.def". Y en el directorio de examples de Dev-C++ habrá una carpeta con un proyecto de ejemplo MySQLClientTest, (que no funcionará :-), aunque esto no debe preocuparnos, ya que tampoco lo vamos a necesitar).
Pero en realidad, aunque esto funcione, lo cierto es que junto con la instalación del servidor MySQL ya existen los ficheros de cabecera y las librerías necesarias para usar MySQL en nuestros programas C/C++.
El método que vamos a explicar tiene la ventaja de que usaremos las librerías adecuadas para la versión de MySQL que tenemos instalada. Si usamos el método del paquete de Dev-C++ probablemente estaremos usando librerías de una versión anterior.
Los ficheros de cabecera están en el directorio include dentro del directorio de instalación de MySQL, que dependerá de dónde lo hayas instalado. Esos ficheros pueden ser copiados al directorio a un directorio mysql dentro del directorio include de Dev-C++.
Además, en el directorio lib\opt de MySQL existen varios ficheros de librería, y una librería de enlace dinámico libmysql.dll. Copiaremos esta librería a un directorio donde sea accesible, por ejemplo al directorio system32 de Windows.
De los ficheros de librerías estáticas sólo nos interesa uno: libmysql.lib.
Pero Mingw no puede usar esa librería directamente. Este compilador usa otro formato de librerías estáticas, que además de tener la extensión ".a", tienen un formato interno diferente. Deberemos, por lo tanto, convertir la librería.
Para poder hacerlo necesitamos los siguientes ficheros:
Y estas tres utilidades:
Los dos primeros ficheros ya los tenemos, los encontraremos en el directorio lib\opt de modo que para trabajar más fácilmente, los copiaremos a un directorio temporal de trabajo, por ejemplo, C:\mysqltmp\.
Para obtener el tercero necesitamos una utilidad de Mingw llamada reimp. Esta utilidad sirve para extraer ficheros de definición de librerías "lib".
Para conseguir la herramienta reimp hay que descargar el fichero Utilidades mingw, que contiene algunas utilidades, pero del que sólo nos interesa el fichero reimp.exe.
Copiaremos el fichero reimp.exe al directorio de trabajo temporal, y ejecutamos esta sentencia desde la línea de comandos:
C:\mysqltmp> reimp -d libmysql.lib
Ahora ya tenemos el fichero libmysql.def. El siguiente paso es generar el fichero de librería estática libmysql.a. Para ello necesitamos las otras dos utilidades, dlltool.exe y as.exe que están incluidan con el compilador Mingw, y que podemos encontrar en el subdirectorio mingw32\bin del directorio donde esté instalado Dev-C++. Para comodidad, copiaremos estas utilidades al directorio temporal de trabajo, y ejecutaremos la siguiente sentencia desde la línea de comandos:
C:\mysqltmp>dlltool -d libmysql.def -D libmysql.dll -k -l libmysql.a
La utilidad as.exe se invoca automáticamente desde dlltool. Ahora ya tenemos nuestro fichero de librería estática libmysql.a, y lo copiaremos al directorio lib de Dev-C++.
Por último, podemos borrar el directorio de trabajo temporal. Y ya podemos usar bases de datos desde programas C/C++.
Este proceso es válido para convertir cualquier librería en formato "lib" a su equivalente en formato "a".
No lo he verificado, pero es de suponer que otros compiladores usarán, o bien las librerías estáticas con extensión "a" si se basan en Mingw, o las que tienen extensión "lib", como los compiladores de Borland o Microsoft.
En cualquier caso, si quieres compartir tus experiencias en estos compiladores con nosotros, podremos ampliar este apartado.
© Abril de 2005 Salvador Pozo, salvador@conclase.net