Esercitazione sulle libpq - libreria C per PostgreSQL



Documenti analoghi
Il linguaggio SQL. è di fatto lo standard tra i linguaggi per la gestione di data base relazionali.

Laboratorio di Basi di Dati e Web

Esercitazione query in SQL L esercitazione viene effettuata sul database viaggi e vacanze che prevede il seguente modello E/R:

Basi di dati. Il Linguaggio SQL. K. Donno - Il Linguaggio SQL

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

MySQL Database Management System

GIS e Geo WEB: piattaforme e architetture. Docente: Cristoforo Abbattista abbattista@planetek.it

CORSO DI ALGORITMI E PROGRAMMAZIONE. JDBC Java DataBase Connectivity

Esercitazione 1. Sistemi Informativi T. Versione elettronica: L01.2.DDLDMLbase.pdf

Una metodologia di progettazione di applicazioni web centrate sui dati

Data Base. Master "Bio Info" Reti e Basi di Dati Lezione 6

Definizione di domini

Laboratorio di Basi di Dati

Introduzione ai Sistemi di Gestione di Basi di Dati XML

Riccardo Dutto, Paolo Garza Politecnico di Torino. Riccardo Dutto, Paolo Garza Politecnico di Torino

Access. Microsoft Access. Aprire Access. Aprire Access. Aprire un database. Creare un nuovo database

Backup e Restore di un database PostgreSQL Sandro Fioravanti INFN-LNF

Lavorare con MySQL Parte Seconda.

GERARCHIE RICORSIVE - SQL SERVER 2008

Gestione dei File in C

Siti web centrati sui dati Architettura MVC-2: i JavaBeans

MySQL Command Line Client: operazioni fondamentali

Introduzione al Linguaggio C

PHP 5. PHP ed i database. Database e tabelle. Struttura di un DB relazionale. Accesso a database

IL LINGUAGGIO SQL IDENTIFICATORI E TIPI DI DATI COMANDI E ISTRUZIONI

BASI DI DATI Cos è il PHP. Cos è il PHP. Esercitazione su PHP & MySQL

2104 volume III Programmazione

Lezione V. Aula Multimediale - sabato 29/03/2008

Gestione ed analisi di base dati nell epidemiologia. delle malattie infettive

DDL, VINCOLI D INTEGRITÁ, AGGIORNAMENTI E VISTE. SQL è più di un semplice linguaggio di interrogazione

Laboratorio Progettazione Web PHP e MySQL. Andrea Marchetti IIT-CNR 2013/2014

Introduzione JDBC interfaccia java.sql driver caricare i driver

Introduzione a MySQL

Laboratorio Progettazione Web PHP e MySQL - Lezione 9. Andrea Marchetti IIT-CNR andrea.marchetti@iit.cnr.ita 2011/2012

Esercitazione 01: DDL e DML di base

User Tools: DataBase Manager

Esercitazione 8. Basi di dati e web

Obiettivo dell esercitazione

Introduzione alla programmazione in C

JDBC. A. Bechini Accesso a DataD con Java

Introduzione ai database relazionali

PHP e Structured Query Language

Architettura MVC-2: i JavaBeans

Laboratorio Progettazione Web PHP e MySQL - Lezione 9. Andrea Marchetti IIT-CNR andrea.marchetti@iit.cnr.ita 2012/2013

Dati relazionali e XML

19. LA PROGRAMMAZIONE LATO SERVER

Il Protocollo HTTP e la programmazione di estensioni Web

Lezione 9. Applicazioni tradizionali

Lezione 8. Metadati, Viste e Trigger

Corso Sistemi Informativi Avanzati. Programma 30 set Installazione Macchina Virtuale. Introduzione alla BI nelle Aziende.

SQL/OLAP. Estensioni OLAP in SQL

SCP - Scuola di Calcolo Parallelo - Scheduler per programmi paralleli. Mattia Sessolo I.T.I.S. V.Volterra San Donà di Piave

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

SQL Server Integration Services. SQL Server 2005: ETL - 1. Integration Services Project

La tecnologia ASP.NET e i database

Progetto di Basi di Dati e Multimidia Laboratorio Struttura dell applicazione web

MDAC. Attualmente la versione disponibile di MDAC è la 2.8 ma faremo riferimento alla 2.6. ADO Active Data Objects ADO OLE DB ODBC

Concetti fondamentali dei database database Cos'è un database Principali database

Form Editor. Dove NomeProfilo è personalizzabile.

Appunti di MySql. Evoluzione di un tutorial di base di mysql, scritto da Etel Sverdlov.

Procedure memorizzate SQL-2003/PSM. Forma base di PSM. Parametri in PSM

MySQL Database Management System

Sviluppata da: Lo Russo - Porcelli Pag. 1 di 6 6FRSR utilizzare il DBMS Postgresql per imparare il linguaggio SQL.

APPENDICE B Le Active Server Page

Costruzione di Sit Web con PHP e MySQL. Lezione 7 - Esercitazione - Introduzione a MySQL: le tabelle, i tpi di dato, le query

Laboratorio di reti II: Gestione di database lato server

PHP 5. Accesso a database

Indice Configurazione di PHP Test dell ambiente di sviluppo 28

PHP e MySQL. Scripting server-side per accesso a DB MySQL

Obiettivi d esame PHP Developer Fundamentals on MySQL Environment

PROGRAMMA SVOLTO DI INFORMATICA ANNO SCOLASTICO 2013/2014. DOCENTE: Villani Chiara

Laboratorio Progettazione Web PHP e FORMs HTML. Andrea Marchetti IIT-CNR andrea.marchetti@iit.cnr.ita 2013/2014

Cos è ACCESS? E un programma di gestione di database (DBMS) Access offre: un ambiente user frendly da usare (ambiente grafico)

Corso di Web Programming

Introduzione al corso

Dynamic Linking. Introduzione Creazione di una libreria dinamica Uso di una libreria dinamica

Esempio: dest = parolagigante, lettere = PROVA dest (dopo l'invocazione di tipo pari ) = pprrlogvgante

I database relazionali sono il tipo di database attualmente piu diffuso. I motivi di questo successo sono fondamentalmente due:

INFORMATICA. Applicazioni WEB a tre livelli con approfondimento della loro manutenzione e memorizzazione dati e del DATABASE.

Esercitazione PAM. (Php Apache MySQL)

Accesso a basi di dati con ASP. Algoritmo per visualizzare un DB

Informatica per le discipline umanistiche 2 lezione 10

Insegnamento di Informatica CdS Scienze Giuridiche A.A. 2006/7. Il trattamento dei dati

Esame di Informatica Generale 9 CFU 21 Giugno 2011 Professori: Carulli, Fiorino, Mazzei

SOSEBI PAPERMAP2 MODULO WEB MANUALE DELL UTENTE

Al giorno d oggi, i sistemi per la gestione di database


Inizializzazione, Assegnamento e Distruzione di Classi

Funzioni. Il modello console. Interfaccia in modalità console

I puntatori e l allocazione dinamica di memoria

Esercizio data base "Biblioteca"

Introduzione al linguaggio C Gli array

Corso di Sicurezza Informatica. Sicurezza del software. Ing. Gianluca Caminiti

Le query. Lezione 6 a cura di Maria Novella Mosciatti

Uso delle basi di dati DBMS. Cos è un database. DataBase. Esempi di database

SQL SQL. Definizione dei dati. Domini. Esistono 6 domini elementari:

Cenni di programmazione distribuita in C++ Mauro Piccolo

JDBC versione base. Le classi/interfacce principali di JDBC

SQL Server. Applicazioni principali

Università degli Studi di Catania Dipartimento di Matematica e Informatica Compilatori 2014/15

Transcript:

Esercitazione sulle libpq - libreria C per PostgreSQL Roberto Tronci roberto.tronci@diee.unica.it Basi di Dati A.A. 2007/2008 Tronci ( roberto.tronci@diee.unica.it ) Esercitazione libpq Basi di Dati 2007/2008 1 / 13

Introduzione Le libpq è una libreria proprietaria di PostgreSQL per interfacciare programmi scritti in linguaggio C con il server DBMS. Tramite questa libreria è possibile eseguire sulla base di dati sia interrogazioni che comandi (in pratica è possibile fare tutto ciò che è possibile fare tramite l interfaccia psql). Per utilizzare le libpq è necessario includere il file libpq-fe.h e linkare il programma con le librerie libpq. Si consiglia di compilare il programma facendo includere le librerie nel file. Tronci ( roberto.tronci@diee.unica.it ) Esercitazione libpq Basi di Dati 2007/2008 2 / 13

Connessione al database La funzione che si occupa della connessione al database è : PGconn * PQconnectdb(const char * conninfo) Questa funzione restituisce un puntatore ad una struttura dati di tipo PGconn, ovvero il tipo definito in libpq per le connessioni al DB. Come parametro d ingresso bisogna mettere una stringa conninfo; questa stringa contiene campi del tipo keyword=valore, se una keyword non viene specificata viene preso il valore di default. Le keyword di nostro interesse sono: host: nome dell host a cui ci si vuole connettere port: porta attraverso la quale ci si connette al server dbname: nome del database a cui ci si vuole collegare user: nome dell utente PostgreSQL con cui collegarsi al database password: password dell utente user Tronci ( roberto.tronci@diee.unica.it ) Esercitazione libpq Basi di Dati 2007/2008 3 / 13

Stato della connessione, errori e chiusura della connessione Lo stato della connessione si verifica tramite la funzione: ConnStatusType PQstatus(const PGconn * conn) ConnStatusType può essere di due tipi: CONNECTION_OK e CONNECTION_BAD (ATTENZIONE: conn potrebbe anche essere NULL). In caso di errore, la stringa che descrive il tipo di errore la si ottiene usando la funzione: char *PQerrorMessage(const PGconn *conn) La connessione viene chiusa usando la funzione: void PQfinish(PGconn *conn) Tronci ( roberto.tronci@diee.unica.it ) Esercitazione libpq Basi di Dati 2007/2008 4 / 13

Esempio di connessione al database Una connessione di esempio è : PGconn *conn; conn = PGconnectdb("host=127.0.0.1 port=5432 dbname=mydb user=postgres password=postpwd"); if (PQstatus(conn)!= CONNECTION_OK) { fprintf(stderr, "Connessione al database fallita.\n"); fprintf(stderr, "%s", PQerrorMessage(conn)); PQfinish(conn); } [...] Tronci ( roberto.tronci@diee.unica.it ) Esercitazione libpq Basi di Dati 2007/2008 5 / 13

Stato della connessione Altre funzioni per la verifica dello stato della connessione sono: PQdb restituisce il nome del database a cui si è collegati char *PQdb(const PGconn *conn) PQuser restituisce il nome utente con cui si è collegati al database char *PQuser(const PGconn *conn) PQpass restituisce la password dell utente con cui si è collegati char *PQpass(const PGconn *conn) PQhost restituisce il nome dell host a cui si è collegati char *PQhost(const PGconn *conn) PQport restituisce la porta a cui si è collegati char *PQport(const PGconn *conn) Tronci ( roberto.tronci@diee.unica.it ) Esercitazione libpq Basi di Dati 2007/2008 6 / 13

Esecuzione comandi/query Per eseguire un comando od una query si deve utilizzare la seguente funzione: PGresult *PQexec(PGconn *conn, const char *command) dove conn è la connessione su cui si vuole eseguire il comando, e command è la stringa che contiene il comando da eseguire. Volendo in command possono essere contenuti più comandi/query separati tramite ;. Il puntatore alla struttura PGresult conterrà solo il risultato dell ultimo comando/query. Un esempio di comando è: res = PGexec(conn,"INSERT INTO socio VALUES (29, Giuseppe, Rossi )") Un esempio di query è: res = PGexec(conn,"SELECT * FROM socio") Tronci ( roberto.tronci@diee.unica.it ) Esercitazione libpq Basi di Dati 2007/2008 7 / 13

Stato dell esecuzione del comando/query Per la verifica dello stato dell esecuzione si usa la seguente funzione: ExecStatusType PQresultStatus(const PGresult *res) Alcune delle risposte che si possono avere in uscita sono: PGRES_EMPTY_QUERY la stringa command mandata al server è vuota PGRES_COMMAND_OK Il comando è stato eseguito con successo (da utilizzare con comandi che non restituiscono dati, quali INSERT, DELETE ecc). PGRES_TUPLES_OK Il comando è stato eseguito con successo (da utilizzare con comandi che restituiscono dati, quali SELECT) PGRES_BAD_RESPONSE La risposta del server non è stata capita PGRES_NONFATAL_ERROR Si è verificato un errore non critico PGRES_FATAL_ERROR Si è verificato un errore critico Tronci ( roberto.tronci@diee.unica.it ) Esercitazione libpq Basi di Dati 2007/2008 8 / 13

Stato dell esecuzione del comando/query Per ottenere una stringa che descriva l errore utilizzare la funzione: char *PQresultErrorMessage(const PGresult *res) Dopo che non è più necessario conservare il risultato dell esecuzione di un comando/query, bisogna utilizzare la seguente funzione per pulire la memoria: void PQclear(PGresult *res) Tronci ( roberto.tronci@diee.unica.it ) Esercitazione libpq Basi di Dati 2007/2008 9 / 13

Recupero dei dati dal risultato di una query Per recuperare il numero di tuple (righe) rstituite dall interrogazione utilizzare: int PQntuples(const PGresult *res) Per recuperare il numero di attributi (colonne) presenti in ogni tupla restituita usare: int PQnfields(const PGresult *res) Per sapere qual è il nome associato all attributo (colonna) utilizzare la seguente funzione, le colonne sono numerate a partire da 0. char *PQfname(const PGresult *res,int columnnumber) Per sapere qual è il tipo del dato associato ad un dato attributo utilizzare la seguente funzione. Viene restituito un numero intero che è l identificativo OID del tipo. Oid PQftype(const PGresult *res,int columnnumber) Tronci ( roberto.tronci@diee.unica.it ) Esercitazione libpq Basi di Dati 2007/2008 10 / 13

Recupero dei dati dal risultato di una query Per ottenere in uscita una singola tupla di un dato PGresult bisogna usare la seguente funzione. Si ricorda che i numeri di riga e colonna partono da 0. Quello che si ottiene è in pratica un cursore che ci permette di utilizzare i dati recuperati. char *PQgetvalue(const PGresult *res, int row_number, int column_number); I dati sono in formato testuale o binario. Nel caso testuale sono stringhe complete del carattere di fine stringa. Poiché l ouput è una stringa se i dati sono numerici è necessario convertirli da testo a numeri qualora si debbano fare ulteriori elaborazioni. Se l attributo ha valore NULL viene restituita una stringa vuota. Tronci ( roberto.tronci@diee.unica.it ) Esercitazione libpq Basi di Dati 2007/2008 11 / 13

Recupero dei dati dal risultato di una query Per distinguere se si tratta di una stringa vuota o di un valore NULL bisogna usare la seguente funzione (restituisce 1 nel caso di valori NULL) int PQgetisnull(const PGresult *res, int row_number, int column_number); Tronci ( roberto.tronci@diee.unica.it ) Esercitazione libpq Basi di Dati 2007/2008 12 / 13

Recupero dei dati dal risultato di una query Per avere in uscita tutte le righe verso uno stream di output usare: void PQprint(FILE *fout, /* output stream */ const PGresult *res, const PQprintOpt *po); typedef struct { pqbool header; // output field headings and row count pqbool align; // fill align the fields pqbool standard; // old brain dead format pqbool html3; // output HTML tables pqbool expanded; // expand tables pqbool pager; // use pager for output if needed char *fieldsep; // field separator char *tableopt; // attributes for HTML table element char *caption; // HTML table caption char **fieldname; // array of replacement field names } PQprintOpt; Tronci ( roberto.tronci@diee.unica.it ) Esercitazione libpq Basi di Dati 2007/2008 13 / 13