|
Hola de nuevo, ahora les traigo un mini tutorial para conectar el lenguaje C con PostgreSQL.Primeramente enlistaremos el Software que usaremos, por ahora solo esta disponible en win32 ( por que esa es la plataforma que usa la persona que me lo pidió) pero en estos días intentaré subir como hacerlo en sistemas basados en unix.
Software necesario: o PostgreSQL. Descárgalo de AQUÍ.o Compilador GCC. Descárgalo de AQUÍ.o Code Blocks que puedes bajar AQUÍ, o puedes bajarte esta versión que YA VIENE CON EL GCC AQUÍ. Lo primero que tenemos que hacer es instalar el PostgreSQL. Es sencillo para win32, pero si se te dificulta un poco, puedes ver este video ilustrativo o descárgalo de AQUÍ. Primeramente tenemos que Crear una base de datos y un usuario que la administre.Crearemos una tabla de ejemplo llamada Persona con tres atributos: Identificador, Nombre y Apellido, solo para empezar. El Identificador lo hacemos llave primaria. Y Crearemos una secuencia llamada ide_persona.Puesto que este no es un curso de PSQL, no voy a entrar mucho a fondo, sin embargo, dejo este video para que puedas verlo o descargarlo y tengas una idea de como se hace. Ahora lo que debemos hacer con CodeBlocks es preparar un proyecto para empezar a trabajar con el, y para ello Tenemos que tener identificados Bien estos directorios: - El directorio donde instalaste PostgreSQL. Por ejemplo (C:\archivos de programa\postgressql\8.2)
- El directorio bin del PostgreSQL ( o sea, de donde lo instalaste + /bin, por ejemplo mi caso: C:\archivos de programa\postgressql\8.2\bin
- El directorio lib del PostgreSQL ( o sea, de donde lo instalaste + /bin, por ejemplo mi caso: C:\archivos de programa\postgressql\8.2\lib
- El directorio include del PostgreSQL ( o sea, de donde lo instalaste + /bin, por ejemplo mi caso: C:\archivos de programa\postgressql\8.2\include
Entonces, abrimos CodeBlocks. Nos vamos al Menú File->New Project. Nos aparecerá una ventana que se llama “New From Template” Y escogemos la que dice “Console Application” y para "File(s) Options" le dejamos en C Source. Le damos en aceptar y guardamos nuestro proyecto en algún lugar de nuestro disco duro.Ya que tenemos abierto nuestro proyecto, no vamos al menú Project -> Build Options.Y seleccionamos la pestaña de Linker, Damos Click en ADD. Y lo que vamos a hacer es identificar conde se encuentra las librerías de PSQL para linkearlas a nuestra aplicación. ¿Donde se encuentran? Muy sencillo. Donde se instaló el PSQL Esta una carpeta llamada lib en mi caso sería la capeta: C:\Archivos de programa\PostgreSQL\8.2\lib, dentro de esa carpeta están los archivos .a que debemos agregar, así que seleccionamos todos y le damos aceptar( Los archivos con Extensión .a).Ahora nos vamos a la pestaña DIRECTORIES en la pestaña de Compiler,le damos de nuevo en ADD y ahora, agregamos el directorio include en mi caso es: C:\Archivos de programa\PostgreSQL\8.2\include. Y le Damos en OK. Ahora, tenemos que agregar al PATH el directorio BIN de PSQL. ¿Cómo? MIRA ESTE VIDEO o DESCARGALO.También tenemos que agregar al PATH del Compilador (por llamarlo de alguna manera), para que podamos ejecutar nuestros programas desde el IDE. Nos vamos a Build->compiler options nos vamos a la pestaña de Programs, y dentro de esa pestaña le picamos a la subpestaña que se llama Additional Paths y le damos en ADD y agregamos el directorio. En mi caso es: C:\Archivos de programa\PostgreSQL\8.2\bin ¿No me entendiste? Pues puedes ver este video, o bajartelo donde ilutra como configurar el CodeBlocks. Ya que tenemos listo nuestro proyecto pues nos pondremos a programar :P. Primero incluimos la librería: #include <libpq-fe.h> Como en cualquier otra librería, con cualquier otro SGBD, como en cualquier lenguaje, para accesar a una base de datos, primero tenemos que realizar una conexión. Para ello, LIBPQ nos dotará de las funciones y de las estructuras necesarias para ello. Para empezarla conexión necesitamos un puntero a estructura del tipo PGconn; PGconn *conexion; Y llamar a la función PQsetdbLogin. Esta función recibe 7 parámetros, todos como cadenas de caracteres(const char*), estos siete parámetros son los siguientes: PQsetdbLogin("localhost", // nombre del servidor, NULL agarra por default a localhostNULL, // Puerto, NULL toma el que esta por default (5432)NULL,//Opciones adicionales- por ahora no nos interesaNULL, // Fichero o terminal para la salida"test1",//Nombre de la base de datos"usuario", // Nombre de usuario"password"); // PASSWORD del usuario PQsetdbLogin retorna un PGconn *. así que para empezar a hacer nuestra conexión sería: PGconn *conexion = PQsetdbLogin("localhost", // nombre del servidor, NULL= default a localhostNULL, // Puerto, NULL toma el que esta por defaultNULL,//Opciones adicionales- por ahora no nos interesaNULL, // Fichero o terminal para la salida"test1",//Nombre de la base de datos"usuario", // Nombre de usuario"password"); // PASSWORD del usuario; Ahora debemos revisar si la conexión no tuvo ninguna falla (digamos que el servidor no esta corriendo, no es el usuario o el password etc.). Esto se hace con PQstatus if (PQstatus(conexion) == CONNECTION_BAD) {printf("\n Error!! ");return 1;
}Para llevar un control de lo que esta sucediendo entre la comunicación del servidor y nuestra aplicación, asignamos un archivo de texto , le asignaremos un archivo de texto para que se escriban las acciones que estamos realizando y llevar un control mas detallado en dado caso que no sepamos que sucede en muchos de los errores que se nos puedan presentar. Esto se hace de la siguiente manera: FILE *debug;debug = fopen("trace.log.txt","w"); PQtrace(conexion, debug); Ya comprobando los errores, al mejor forma de ejecutar los comandos SQL en PSQL es con la función PGexec(PGconn *, const char*).Esta función regresa un puntero a estructura PGresult; Por ejemplo, para crear una tabla utilizamos el comando “Create table Tabla(ide integer, valor1 varchar(30), valor2 decimal);” entonces tendríamos que: PGExec(conexion,“Create table Tabla(ide integer, valor1 varchar(30), valor2 decimal);” ); NOTA: para empezar las transacciones con la base de datos, el primer comando a ejecutar debe ser BEGIN y el ultimo COMMIT para realizar los cambios en una transacción.. Cabe la posibilidad ( la gran posibilidad) de que nuestra sintaxis del comando este mal, que el servidor haya pachequeado o algo por el estilo, así que es mejor ver que sucedió con nuestro comando, si efectivamente se ejecutó o no. PGresult *resultado = PQexec(conexion,"Create table Tabla(ide integer, valor1 varchar(30), valor2 decimal);");if (!resultado || PQresultStatus(resultado) != PGRES_COMMAND_OK) {printf("el comando CREAE ha fallado\n");PQclear(resultado); // LimpiamosPQfinish(conexion); // Cerramos la Conexiónreturn 1;} Es muy importante cerrar las conexiones a la base de datos, por que sino podemos saturar el servidor. El 90 % de las aplicaciones fallan por esto :P. Para obtener datos de la base, utilizamos la misma función PQexec, solo que esta vez, la estructura PGresult, contendrá el resultado den nuestro query. Entonces, si queremos hacer un “select * from persona”: Y desplegar el contenido Tendríamos que hacer lo siguiente: resultado = PQexec(conexion,"select * from Persona");int columnas = PQnfields(resultado); // Obtenemos el numero de colum.int filas = PQntuples(resultado); //Obtener el numero de filasfor(i=0; i<filas; i++) {printf("\nNombre %d: %s",i, (char*)PQgetvalue(resultado,i,0));printf("\nApellido %d: %s",i, (char*)PQgetvalue(resultado,i,1));printf("\nID %d: %s",i, (char*)PQgetvalue(resultado,i,2));printf("\n**********************************");}Donde la variable entera i , nos indicará en que FILA estamos. El otro entero nos indica la columna, dependiendo del orden que le hayamos dado a nuestros campos. Por ejemplo: resultado = PQexec(conexion,"select ide,nombre from Persona");int columnas = PQnfields(resultado); // Obtenemos el numero de columnasint filas = PQntuples(resultado); //Obtener el numero de filasint i; for(i=0; i<filas; i++) {printf("\nIde %d: %s",i, (char*)PQgetvalue(resultado,i,0));printf("\nNombre %d: %s",i, (char*)PQgetvalue(resultado,i,1));printf("\n**********************************");}NOTA: Todos los resultados los regresa como CHAR*. En este caso, la primer columna ( o sea, la columna 0) será IDE, y la siguiente columna (columna 1), contendrá el nombre; Pues esto solo es una introducción básica al PSQL desde C. Espero que próximamente agregue mas funciones para poder tener un desarrollo eficaz. ¿No me entendiste?¬_¬ pues no hay video para esto, tienes que preguntar en los comentarios :P. Aquí les dejo un Código completo que les puede ayudar mucho. Espero sus comentarios, correcciones y dudas. Muchas Gracias. |