Guía de Implantación de las Bibliotecas API de MiniSQL

[Contenido]

[Anterior] [Siguiente]

  

 


Introducción

MiniSQL o mSQL es una base de datos para sistemas Unix de acceso rápido y almacenamiento simple con requerimientos mínimos de memoria, lo que la hace adecuada para publicar información en el Web. Como su nombre lo indica ofrece un subconjunto de sentencias SQL como interfaz de consulta.

Las bibliotecas API de MiniSQL proveen una serie de funciones que permiten establecer comunicación con una base de datos MiniSQL desde un programa en Lenguaje C, en el cual se pueden incrustar sentencias SQL.

El conjunto de bibliotecas API para Lenguaje C forma parte del paquete de distribución MiniSQL que se ofrece gratuitamente en Internet. Por lo cual, los apartados Adquisición de Software e Instalación se refieren a la base de datos MiniSQL . Si ya se posee MiniSQL en su sistema, se recomienda ir hasta el apartado de Configuración.

La interfaz API de MiniSQL se implantó en una PC con procesador Intel 586 con 8 MB en memoria RAM; con el Sistema Operativo Linux 1.2.13, el servidor Web NCSA HTTP Server y la base de datos MiniSQL 1.0.

A continuación se detalla el procedimiento a seguir para implantar W3-msql en Linux 1.2.13, pero los pasos pueden generalizarse para otros tipos de Unix.

Adquisición de Software

Especifique en su browser:

http://Hughes.com.au/software/msql1/msql-1.0.16.tar.gz

El archivo msql-1.0.16.tar.gz posee MiniSQL ver 1.0.16 y tiene un tamaño aproximado de 19 Kb.

Instalación

  1. Descomprimir archivo de MiniSQL desde línea de comandos Unix:
    #dir_instalacion/gzip -d msql-1.0.16.tar.gz | tar -xvf
    Con lo cual se crea un directorio que contiene los archivos fuente de MiniSQL: #dir_instalacion/msql-1.0.16/
  2. En este nuevo directorio ejecutar, make target.
  3. Cambiarse a directorio #dir_instalacion/msql-1.0.16/target/ y digitar setup.
  4. Ejecutar make.
  5. Ejecutar make install.

Al finalizar , todo el software se habrá instalado en /usr/local/Minerva.

Configuración

Para que una base de datos responda a una serie de requisiciones, es necesario que el servicio(daemon) de MiniSQL esté activo, por lo cual debe incorporarse a la lista de procesos que serán iniciados cada vez que el sistema operativo arranque. Este servicio(daemon) se llama msqld y también se puede levantar o activar en manera interactiva de la siguiente forma:

/usr/local/Minerva/bin# msqld & ps -x | grep msqld

Acceso a Archivos C

Un programa C que emplee API y además actúe como interfaz entre el Web y mSQL, es referido como cualquier programa CGI, es decir:

http://<servidor_web>/<dir-cgi>/programa

<servidor_web>: Es la dirección IP o alias del Servidor Web.

<dir-cgi>: Ruta del directorio de escritos CGI del Servidor Web.

programa: Programa ejecutable de escrito C.

Ejemplo de Aplicación

Para elaborar un programa C que sirva de interfaz entre el Web y MiniSQL deben satisfacerse las siguientes condiciones:

1. Especificar Tipo de Contenido.

1.1 Impresión de Tipo de Contenido.

En primer lugar se debe imprimir tipo de contenido seguido de dos saltos de línea:

printf ("Content-type: text/html \n\n");

1.2 El Contenido debe desplegarse acorde al formato especificado.

Todo lo que se imprima debe conservar el tipo especificado.

Por ejemplo, si se ha especificado text/html, debe imprimirse:

printf("<H1>EJEMPLO de API</H1>");

2. Incluir archivo de cabecera msql.h.

Este archivo debe incluirse al principio del programa para hacer uso de las funciones API para MiniSQL:

#include "msql.h"

3. Enlazar programa con biblioteca mSQL.

Al compilar el programa debe usarse como argumento -lmsql para enlazarlo con las bibliotecas de MiniSQL:

cc nombre_program.c -lmsql

gcc nombre_program.c -lmsql

A continuación se presenta un programa que consulta registros de una base de datos de estudiantes, a partir del siguiente formulario:

  • <HTML>

    <BODY>

    <H2>Consulte por Nombre:</H2>

    <FORM METHOD="GET" ACTION="/cgi-bin/uncgi/consul">

    <P>Nombre:<INPUT NAME="nombre" SIZE=40>

    <INPUT TYPE="SUBMIT"VALUE="CONSULTAR">

    </FORM>

    </BODY>

    </HTML>

  • El programa C consul2 hace uso de biblioteca UNCGI para descodificar información proveniente del formulario, es por eso que en el URL se hace referencia al programa ejecutable de UNCGI.

    Por lo tanto consul es:

  • // Programa Consul2

    #include "stdio.h"

    #include "string.h"

    #include "stdlib.h"

    #include "msql.h"

    void main(void){

    char *nombre, *condicion, *consulta;

    int id_host, id_db, i=0;

    m_result *resultado;

    m_row registro;

    strcpy(condicion, "WHERE");

    strcpy(consulta, "SELECT * FROM Estudiantes");

    nombre=getenv("WWW_nombre"); // Uso de UNCGI

    if ( strcmp(nombre," ") ){

    strcat(condicion, "nombre= ‘ "); //Construcción de WHERE

    strcat(condicion, nombre); // si hay datos de la forma

    strcat(condicion," ‘ ");

    strcat(consulta, condicion);

    }

    printf("Content-type: text/plain \n \ n"); //Impresión de contenido de tipo

    if ((id_host=msqlConnect("168.243.253.3"))== -1){

    printf("Ha ocurrido el siguiente error:\n");

    printf(msqlErrMsg);

    exit(1);

    }

    id_db= msqlSelectDB(id_host, "UCA");

    msqlQuery(id_host, consulta);

    resultado= msqlStoreResult();

     

    if (msqlNumRows(resultado) !=0){

    while(i<msqlNumRows(resultado)){

    msqlDataSeek(resultado, i);

    registro = msqlFetchRow(resultado);

    printf("Nombre: %s \n ",registro[0]);

    printf("Carrera: %s \n", registro[1]);

    i++;

    }

    }

    msqlFreeResult(resultado);

    msqlClose(id_host);

    }

  • Funciones API de miniSQL

    El software de distribución provee de la documentación completa de MiniSQL, incluyendo una descripción completa de las funciones API; a continuación se describen las más empleadas:

    int msqlConnect(char *host)

    Establece una conexión con el motor de MiniSQL y como argumento toma la dirección IP o el nombre(alias) de la máquina en donde se ejecuta el servidor mSQL. Retorna un entero que identifica la conexión establecida. Si ocurre algún error devuelve -1.

    int msqlSelectDB(int sock, char *nombre_base)

    Función mediante la cual se selecciona la base de datos que recibirá la consulta. Recibe como parámetros el identificador de la conexión y el nombre de la base de datos. Retorna el identificador de la base de datos elegida.

    int msqlQuery(int sock, char *query)

    Función con la cual se envían sentencias SQL a la base. Como parámetros requiere el identificador de la conexión y la consulta SQL a ejecutar. Si la consulta es del tipo SELECT, la información requerida se aloja en el buffer.

    m_result *msqlStoreResult()

    La información en el buffer se recupera en una estructura del tipo m_result definida en msql.h. Retorna el apuntador a la estructura.

    msqlFreeResult(m_result *result);

    Si ya no se utiliza estructura m_result es necesario liberarla con la función msqlFreeResult().

    m_row msqlFetchRow(m_result *result)

    El conjunto de filas retornadas por una sentencia SELECT se acceden desde esta función. La información se aloja en una variable del tipo m_row, definida en msql.h, la cual contiene un apuntador de tipo carácter para cada campo de la fila.

    msqlDataSeek(m_result *result, int pos)

    Permite controlar la fila que será recuperada con cada llamada msqlFetchRow(). Como parámetros recibe el apuntador a la estructura que contiene la información y el número de fila requerido, disminuido en 1.

    int msqlNumRows(m_result *result)

    Retorna el número de filas obtenidas al enviar una sentencia SELECT. Como parámetro requiere el apuntador a la estructura.

    int msqlClose(int sock)

    Clausura la conexión establecida con el motor de MiniSQL, como parámetro recibe el identificador de la conexión. Retorna un valor diferente de -1 si ejecuta con éxito la operación.


    [Contenido] [Anterior] [Arriba] [Siguiente]