50
DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche Romina Eramo Tecnologie dei Linguaggi di Programmazione Programmazione Java: JDBC Romina Eramo [email protected] http://www.di.univaq.it/romina.eramo/tlp

Programmazione Java: JDBC - di.univaq.it · DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche Romina Eramo Tecnologie dei Linguaggi di Programmazione

Embed Size (px)

Citation preview

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina Eramo Tecnologie dei Linguaggi di Programmazione

Programmazione Java: JDBC

Romina Eramo [email protected]

http://www.di.univaq.it/romina.eramo/tlp

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina Eramo Tecnologie dei Linguaggi di Programmazione

Roadmap

›  Introduzione ›  Risorse ›  Driver ›  Contesto Applicativo ›  SQL ›  Classi e interfacce ›  Passi

»  Registrare un driver »  Stabilire una connessione al DB »  Creare uno statement »  Eseguire l’SQL »  Processare il risultato »  Eliminare gli oggetti JDBC

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina Eramo Tecnologie dei Linguaggi di Programmazione

Java Database Connectivity (JDBC) (1)‏

›  Le API JDBC consentono di accedere a qualsiasi tipo di dati tabulari, in particolare a i dati memorizzati in database relazionali

›  JDBC consente di scrivere applicazioni Java che gestiscono queste tre attività di programmazione: »  Connettere un'origine dati (e.g., database) »  Inviare query e istruzioni di aggiornamento per il

database »  Recuperare ed elaborare i risultati ricevuti dal

database in risposta alla tua richiesta

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina Eramo Tecnologie dei Linguaggi di Programmazione

public void connectToAndQueryDatabase(String username, String password) {!! Connection con = DriverManager.getConnection(! "jdbc:myDriver:myDatabase",! username,! password);!! ! Statement stmt = con.createStatement();! ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table1");!! while (rs.next()) {! int x = rs.getInt("a");! String s = rs.getString("b");! float f = rs.getFloat("c");! }!}!

crea un'istanza di un oggetto ResultSet che recupera i risultati della query

Esempio dei 3 passi precedenti:

crea un oggetto DriverManager per connettersi ad un database driver e accedere al database

crea un'istanza di un oggetto Statement che effettua la query SQL al database

infine esegue un semplice ciclo while, che recupera e visualizza i risultati

Java Database Connectivity (JDBC) (2)‏

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina Eramo Tecnologie dei Linguaggi di Programmazione

›  JDBC include: »  API JDBC - Un insieme di interfacce che fanno parte

della piattaforma Java e costituiscono le API per il programmatore

»  JDBC Driver Manager - Gestore di driver che permette a driver di terze parti di connettersi ad un DB specifico ›  Un driver JDBC permette di

»  Connettersi ad un DB »  Inviare un comando SQL »  Processare il risultato

Java Database Connectivity (JDBC) (3)‏

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina Eramo Tecnologie dei Linguaggi di Programmazione

Risorse

›  Libri »  Titolo: Java 2 Volume II – settima edizione

Autori: Cay S. Horstmann, Gary Cornell Casa Editrice: Prentice Hall ISBN: 88-7192-237-9

»  Titolo: JDBC API Tutorial and Reference – Terza edizione Autori: Maydene Fisher, Jon Ellis, Jonathan Bruce Casa Editrice: Addison-Wesley Professional ISBN: 0321173848

›  Java Tutorial – JDBC Trial »  http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html

›  JDBC API Documentation »  http://docs.oracle.com/javase/1.5.0/docs/guide/jdbc/index.html »  http://docs.oracle.com/javase/1.5.0/docs/api/java/sql/package-

summary.html

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina Eramo Tecnologie dei Linguaggi di Programmazione

Driver (1)‏

Tipo 1 (JDBC-ODBC bridge)‏ »  Traduce JDBC in ODBC (Open DataBase Connectivity) »  Viene utilizzato un driver ODBC »  JDK contiene un ponte JDBC-ODBC »  E’ necessario configurare ODBC »  Generalmente utilizzato in ambito di test

Tipo 2 (Native-API Driver)‏ »  Scritto parzialmente in java e parzialmente in codice nativo »  Chiamate JDBC vengono convertite in chiamate alle API dei client

Oracle, IBM DB2 »  E’ necessario installare le librerie native

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina Eramo Tecnologie dei Linguaggi di Programmazione

Driver (2)‏

Tipo 3 (Network-Protocol Driver / MiddleWare Driver) »  Fa uso di un middle tier tra le il programma chiamante e il database »  Il middle-tier (application server) converte le chiamate JDBC in un

protocollo DBMS-independent »  Vengono poi traslate da un server nel relativo protocollo del DBMS

Tipo 4 (Native-Protocol Driver / Pure Java Driver) »  Chiamate JDBC vengono convertite direttamente nelle chiamate al

protocollo del DBMS specifico »  Scritto completamente in Java

Nota E’ presente una lista di driver disponibili sul mercato

»  http://www.oracle.com/technetwork/database/features/jdbc/index-091264.html

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina Eramo Tecnologie dei Linguaggi di Programmazione

Driver (3)‏

Type 1: JDBC-ODBC Bridge plus ODBC Driver  This combination provides JDBC access via ODBC drivers. ODBC binary code -- and in many cases, database client code -- must be loaded on each client machine that uses a JDBC-ODBC Bridge. Oracle provides a JDBC-ODBC Bridge driver, which is appropriate for experimental use and for situations in which no other driver is available.  Type 2: A native API partly Java technology-enabled driver  This type of driver converts JDBC calls into calls on the client API for Oracle, Sybase, Informix, DB2, or other DBMS. Note that, like the bridge driver, this style of driver requires that some binary code be loaded on each client machine. 

Type 1 Type 2

http://www.oracle.com/technetwork/java/overview-141217.html

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina Eramo Tecnologie dei Linguaggi di Programmazione

Driver (4)‏

Type 4: Direct-to-Database Pure Java Driver  This style of driver converts JDBC calls into the network protocol used directly by DBMSs, allowing a direct call from the client machine to the DBMS server and providing a practical solution for intranet access.  Type 3: Pure Java Driver for Database Middleware  This style of driver translates JDBC calls into the middleware vendor's protocol, which is then translated to a DBMS protocol by a middleware server. The middleware provides connectivity to many different databases. 

Type 4 Type 3

http://www.oracle.com/technetwork/java/overview-141217.html

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina Eramo Tecnologie dei Linguaggi di Programmazione

Contesto Applicativo: Applicazioni Two-tier

›  L'applicazione Java parla direttamente alla sorgente dati »  Il driver JDBC può comunicare con la particolare origine dati a

cui si accede »  I comandi utente sono inviati al database o altre fonti dati, ed i

risultati di tali istruzioni vengono inviati all'utente

›  Configurazione client/server: l'origine dati può essere situata su un'altra macchina (server) a cui l'utente è collegato tramite rete (client)

Java Application

JDBC

Client machine

DBMS proprietary protocol

Database server DBMS

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina Eramo Tecnologie dei Linguaggi di Programmazione

Contesto Applicativo: Applicazioni Three-tier

›  I comandi utente vengono inviati a un "livello intermedio" dei servizi, che poi li invia all'origine dati. Questa elabora i comandi e invia i risultati al livello intermedio, che poi li invia all'utente

»  Il livello intermedio consente di mantenere il controllo sull'accesso e sul tipo di aggiornamenti, inoltre semplifica la distribuzione di applicazioni

›  Java e le API JDBC sono diventate lo standard per lo sviluppo di livello intermedio

Application Server (Java)

JDBC

Server machine (business logic)

DBMS proprietary protocol

Database server DBMS

Java appletor HTML browser

Client machine (GUI)

HTTP, RMI, CORBA, or other calls

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina Eramo Tecnologie dei Linguaggi di Programmazione

SQL (1)‏

›  SQL è il linguaggio standard per accedere ai DB relazionali

›  SQL non è standardizzato » Per i tipi ›  JDBC lo risolve introducendo un insieme generico di

tipi » Per i diversi statement ›  JDBC permette l’invio di una qualsiasi istruzione SQL

(i driver devono essere almeno conformi all’ANSI SQL-92 Entry Level)‏

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina Eramo Tecnologie dei Linguaggi di Programmazione

SQL (2)‏

Oggetto carattere large CLOB

Oggetto binario large BLOB

Data e ora del giorno dipendente dall’implementazione TIMESTAMP

Ora del giorno dipendente dall’implementazione TIME

Data del calendario dipendente dall’implementazione DATE

Booleano BOOLEAN

Stringa di lunghezza variabile max n VARCHAR(N)

Stringa di lunghezza fissa n CHARACTER(N) CHAR(N)

Di solito virgola mobile a 64bit DOUBLE

Di solito virgola mobile a 32bit REAL

Numero a virgola mobile con precisione di n cifre binarie FLOAT(N)

Numero decimale a lunghezza fissa con m cifre totali e n cifre dopo il punto decimale

NUMERIC(M,N), DECIMAL(M,N) DEC(M, N)

Di solito intero a 16 bit SMALLINT

Di solito intero a 32 bit INTEGER O INT

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina Eramo Tecnologie dei Linguaggi di Programmazione

Classi e interfacce (1)‏

SQLPermission

ResultSet <<Interface>>

Connection <<Interface>>

DriverPropertyInfo Statement

<<Interface>>

PreparedStatement <<Interface>>

CallableStatement <<Interface>>

Driver <<Interface>>

DriverManager

package java.sql

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina Eramo Tecnologie dei Linguaggi di Programmazione

Classi e interfacce (1)‏

ResultSet <<Interface>>

Connection <<Interface>>

DriverPropertyInfo Statement

<<Interface>>

PreparedStatement <<Interface>>

CallableStatement <<Interface>>

Driver <<Interface>>

DriverManager

package java.sql

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina Eramo Tecnologie dei Linguaggi di Programmazione

Classi e interfacce (2)‏

›  DriverManager facility »  DriverManager: permette una connessione con un driver »  Driver: fornisce le API per registrare e connettere i

driver; utilizzata dalla classe DriverManager

»  DriverPropertyInfo: fornisce le proprietà di un driver JDBC (generalmente non utilizzata)‏

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina Eramo Tecnologie dei Linguaggi di Programmazione

Classi e interfacce (3)‏

›  SQL statements »  Statement: utilizzata per inviare statements base SQL »  PreparedStatement: utilizzata per inviare prepared

statements »  CallableStatement: utilizzata per invocare le stored

procedure »  Connection: fornisce metodi per creare statements e

gestire le connessioni »  …

›  ResultSet: rappresenta il risultato di una query

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina Eramo Tecnologie dei Linguaggi di Programmazione

Classi e interfacce (4)‏

›  SQLException »  Lanciata dai metodi quando vi è

un problema nell’accesso ai dati o per altri ragioni

›  SQLWarning »  Indica un warning

›  DataTruncation »  Indica dati che potrebbero

essere stati troncati ›  BatchUpdateException

»  Indica che non tutti i comandi in un update batch non sono stati eseguiti con successo

SQLException

SQLWarning

DataTruncation

BatchUpdateException

package java.sql

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina Eramo Tecnologie dei Linguaggi di Programmazione

Classi e interfacce (5)‏ package java.sql

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina Eramo Tecnologie dei Linguaggi di Programmazione

Classi e interfacce (6)‏

›  Mapping per i tipi SQL a classi e interfacce Java »  Array: mapping per SQL ARRAY »  Blob: mapping per SQL BLOB »  Clob: mapping per SQL CLOB »  Date: mapping per SQL DATE »  Ref: mapping per SQL REF »  Struct: mapping per SQL STRUCT »  Time: mapping per SQL TIME »  Timestamp: mapping per SQL TIMESTAMP »  Types: contiene costanti per i tipi SQL

›  INT, VARCHAR, NUMBER, DATE, ….

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina Eramo Tecnologie dei Linguaggi di Programmazione

Classi e interfacce (7)‏

›  Custom mapping per un tipo SQL definito dall’utente »  SQLData »  SQLInput »  SQLOutput

›  Metadata »  DatabaseMetaData: fornisce informazioni sul DBMS »  ResultSetMetaData: fornisce informazioni sulle

colonne di un ResultSet »  ParameterMetaData: fornisce informazioni sui

parametri di un comando PreparedStatement

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina Eramo Tecnologie dei Linguaggi di Programmazione

JDBC

›  Getting start »  Installa Java e JDBC (J)‏ »  Installa il DBMS ›  MySql 4.0.x

» Download and Installa un driver ›  mysql-connector-java-3.1.14-bin.jar (http://

dev.mysql.com/downloads/connector/j/3.1.html)‏

» Creazione del Database ›  javalibrary

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina Eramo Tecnologie dei Linguaggi di Programmazione

Database

drop database javalibrary; create database javalibrary; use javalibrary; CREATE TABLE title_kind( title_kind_id mediumint(10) NOT NULL AUTO_INCREMENT PRIMARY KEY, name varchar(100) not null); CREATE TABLE title( title_id mediumint(10) NOT NULL AUTO_INCREMENT PRIMARY KEY, name varchar(255) not null, title_kind_id mediumint(10) not null, description varchar(255), author varchar(100), isbn varchar(50), constraint ttl_tik_fk foreign key(title_kind_id) references

title_kind(title_kind_id));

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina Eramo Tecnologie dei Linguaggi di Programmazione

Passi

›  Registrare un driver ›  Stabilire una connessione al DB ›  Creare uno statement ›  Eseguire l’SQL ›  Processare il risultato ›  Eliminare gli oggetti JDBC

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina Eramo Tecnologie dei Linguaggi di Programmazione

Registrare un driver (1)‏

›  Interfaccia Driver fornisce un’astrazione verso il DB ›  Viene utilizzato dal DriverManager per connettersi al DB

»  E’ lo strato di gestione all’interno di JBDC che si interpone tra l’utente e i drivers

»  Mantiene traccia dei driver che sono disponibili e gestisce le connessioni tra un DB e il relativo driver

»  JDBC 2.0 ha introdotto un’interfaccia DataSource (javax.sql) che è un’alternativa alla gestione delle sorgenti di dati

›  JDBC utilizza il primo driver che si connette con successo ad una data URL

›  Si possono registrare diversi driver

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina Eramo Tecnologie dei Linguaggi di Programmazione

Registrare un driver (2)‏

›  Un driver viene registrato »  Utilizzando il Class Loader

›  Class.forName("acme.db.Driver");

›  Permette di caricare esplicitamente il driver ›  Il driver una volta caricato si registra presso il

DriverManager mediante il metodo registerDriver

»  Utilizzando la proprietà di sistema jdbc.drivers ›  Sintassi: java -Djdbc.drivers=driverName[:driverName]

»  Istanziando esplicitamente una classe che implementa l’interfaccia Driver

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina Eramo Tecnologie dei Linguaggi di Programmazione

Registrare un driver (3)‏

public class TestLoading1 { public static void main( String[] args ) { try { Class.forName("com.mysql.jdbc.Driver" ); } catch ( ClassNotFoundException e ) { e.printStackTrace(); } } }

Esempio 1

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina Eramo Tecnologie dei Linguaggi di Programmazione

Registrare un driver (4)‏

public class TestLoading2 { public static void main( String[] args ) { System.out.println( "welcome!" ); } } C:> java –Djdbc.drivers=com.mysql.jdbc.Driver

Esempio 2

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina Eramo Tecnologie dei Linguaggi di Programmazione

Registrare un driver (5)‏

public class TestLoading3 { public static void main( String[] args ) { try { Driver driver = new com.mysql.jdbc.NonRegisteringDriver(); DriverManager.registerDriver( driver );

} catch ( SQLException e ) { e.printStackTrace(); } } }

Esempio 3

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina Eramo Tecnologie dei Linguaggi di Programmazione

Stabilire una connessione al DB (1)‏

›  Esistono tre metodi nella classe DriverManager per effettuare la connessione »  getConnection(String url) »  getConnection(String url, java.util.Properties info)

›  Le proprietà sono dipendenti dal DBMS ›  Contengono almeno le proprietà user e password

»  getConnection(String url, String user, String password)

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina Eramo Tecnologie dei Linguaggi di Programmazione

Stabilire una connessione al DB (2)‏

›  Formato URL »  jdbc:protocollo_secondario:altro »  protocollo_secondario seleziona il driver specifico

di connessione al db »  altro dipende dal valore di protocollo_secondario »  Esempi jdbc:mysql://localhost/javalibrary jdbc:oracle:thin:@127.0.0.1:1521:OracleDB

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina Eramo Tecnologie dei Linguaggi di Programmazione

Stabilire una connessione al DB (3)‏

public class TestConnection { private static final String DRIVER_NAME = "com.mysql.jdbc.Driver"; public static void main( String[] args ) { try { Class.forName( DRIVER_NAME ); Connection connection = DriverManager.getConnection( args[ 0 ],

args[ 1 ], args[ 2 ] ); } catch ( ClassNotFoundException e ) { e.printStackTrace(); } catch ( SQLException e ) { e.printStackTrace(); } } } C:> java TestConnection jdbc:mysql://localhost/javalibrary root “”

Esempio

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina Eramo Tecnologie dei Linguaggi di Programmazione

Creare uno statement (1)‏

›  Un oggetto Statement è utilizzato per inviare istruzioni SQL al DB

›  Tre tipi di oggetti statement »  Statement

›  Permette di eseguire semplici istruzioni SQL senza parametri

»  PreparedStatement ›  Viene preparata una query che poi sarà utilizzata diverse volte ›  Aumento prestazioni

»  CallableStatement ›  Permette di eseguire chiamate a stored procedure

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina Eramo Tecnologie dei Linguaggi di Programmazione

Creare uno statement (2)‏

›  Per creare gli statement si utilizzano i rispettivi metodi presenti all’interno di Connection »  Statement createStatement() »  PreparedStatement prepareStatement(String sql) »  CallableStatement prepareCall(String sql)

»  Esistono altri metodi per creare gli oggetti

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina Eramo Tecnologie dei Linguaggi di Programmazione

Eseguire l’SQL

›  Interfaccia Statement »  ResultSet executeQuery(String sql)

›  Esegue un’istruzione SQL (SELECT) e ritorna un ResultSet che identifica il risultato

»  int executeUpdate(String sql) ›  Esegue un’istruzione SQL (INSERT, UPDATE, DELETE ) e ritorna il

numero di righe di cui è stato effettuato l’update

...

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina Eramo Tecnologie dei Linguaggi di Programmazione

Processare il risultato

›  Interfaccia ResultSet »  Mantiene un cursore che punta alla riga corrente dei dati »  Inizialmente è posizionato prima della prima riga »  Metodo boolean next() muove il cursore in avanti e

ritorna false se non ci sono più righe »  Default con il ResultSet non si possono modificare le

righe e tornare indietro »  Esempio

Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery("SELECT a, b FROM TABLE2");

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina Eramo Tecnologie dei Linguaggi di Programmazione

Processare il risultato

›  Per recuperare le colonne dal ResultSet vi sono dei metodi getXXX (getBoolean, getLong, getString, …)

›  Valori possono essere recuperati »  Utilizzando l’indice (più efficiente e numerato da 1) oppure »  Nome della colonna (case insensitive)‏

›  Driver JDBC tenta di convertire dati sottostanti con tipi di dati Java

›  Problema con tipi del DB rispetto a tipi Java a causa della mancanza dello standard SQL

›  JDBC risolve il problema definendo dei propri tipi mediante la classe java.sql.Types

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina Eramo Tecnologie dei Linguaggi di Programmazione

Processare il risultato

JAVA_OBJECT Java class

REF Ref

STRUCT Struct

ARRAY Array

BLOB Blob

CLOB Clob

TIMESTAMP java.sql.Timestamp

TIME java.sql.time

DATE java.sql.Date

BINARY, VARBINARY, or LONGVARBINARY byte[]

DOUBLE Double

REAL Float

BIGINT Long

INTEGER Integer

BIT Boolean

NUMERIC java.math.BigDecimal

CHAR, VARCHAR, or LONGVARCHAR String

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina Eramo Tecnologie dei Linguaggi di Programmazione

Processare il risultato (4)‏

http://java.sun.com/j2se/1.4.2/docs/guide/jdbc/getstart/mapping.html

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina Eramo Tecnologie dei Linguaggi di Programmazione

Processare il risultato (5)‏

http://java.sun.com/j2se/1.4.2/docs/guide/jdbc/getstart/mapping.html

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina Eramo Tecnologie dei Linguaggi di Programmazione

Processare il risultato (6)‏ Qualsiasi tipo di dati MySql può essere convertito in java.lang.String e qualsiasi tipi numerico può essere convertito in un qualsiasi tipo numerico di Java

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina Eramo Tecnologie dei Linguaggi di Programmazione

Processare il risultato

public class TestStatement { private static final String DRIVER_NAME="com.mysql.jdbc.Driver"; private static final String SQL = "SELECT * FROM title"; public static void main( String[] args ) { try { Class.forName( DRIVER_NAME ); Connection connection = DriverManager.getConnection(

args[ 0 ], args[ 1 ], args[ 2 ] ); Statement statement = connection.createStatement(); ResultSet resultSet = statement.executeQuery( SQL ); …………………………………………………

Esempio 1

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina Eramo Tecnologie dei Linguaggi di Programmazione

Processare il risultato ‏ …………………………………… while ( resultSet.next() ) { System.out.println( "ID: " + resultSet.getInt( "title_id" ) ); System.out.println( "Name: " + resultSet.getString( "name" ) ); System.out.println( "Title Kind ID: " +

resultSet.getInt( "title_kind_ID" ) ); System.out.println( "Description: " +

resultSet.getString( "description" ) ); System.out.println( "Author: " + resultSet.getString( "author" ) ); System.out.println( "Isbn: " + resultSet.getString( "isbn" ) ); System.out.println( "-----------------------------------" ); } } catch ( ClassNotFoundException e ) { e.printStackTrace(); } catch ( SQLException e ) { e.printStackTrace(); } } }

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina Eramo Tecnologie dei Linguaggi di Programmazione

Processare il risultato public class TestPreparedStatement { private static final String DRIVER_NAME="com.mysql.jdbc.Driver"; private static final String SQL =

"SELECT * FROM title WHERE name=?"; public static void main( String[] args ) { try { Class.forName( DRIVER_NAME ); Connection connection = DriverManager.getConnection(

args[ 0 ], args[ 1 ], args[ 2 ] ); PreparedStatement preparedStatement =

connection.prepareStatement( SQL ); preparedStatement.setString( 1, "name"); ResultSet resultSet = preparedStatement.executeQuery(); ……………………………………………

Esempio 2

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina Eramo Tecnologie dei Linguaggi di Programmazione

Processare il risultato while ( resultSet.next() ) { System.out.println( "ID: " + resultSet.getInt( "title_id" ) ); System.out.println( "Name: " + resultSet.getString( "name" ) ); System.out.println( "Title Kind ID: " +

resultSet.getInt( "title_kind_ID" ) ); System.out.println( "Description: " +

resultSet.getString( "description" ) ); System.out.println( "Author: " +

resultSet.getString( "author" ) ); System.out.println( "Isbn: " + resultSet.getString( "isbn" ) ); System.out.println( "-----------------------------------" ); } } catch ( ClassNotFoundException e ) { e.printStackTrace(); } catch ( SQLException e ) { e.printStackTrace(); } } }

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina Eramo Tecnologie dei Linguaggi di Programmazione

Eliminare gli oggetti JDBC (1)‏

›  Al termine delle operazioni è necessario chiudere tutti gli oggetti coinvolti

try { …………………………… resultset.close(); statement.close();

connection.close(); } catch (SQLException ex) {

ex.printStackTrace(); }

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina Eramo Tecnologie dei Linguaggi di Programmazione

Eliminare gli oggetti JDBC (2)‏

public class TestPreparedStatementClose { private static final String DRIVER_NAME="com.mysql.jdbc.Driver"; private static final String SQL =

"SELECT * FROM title WHERE name=?"; public static void main( String[] args ) { Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { Class.forName( DRIVER_NAME ); conn = DriverManager.getConnection(

args[ 0 ], args[ 1 ], args[ 2 ] ); ps = con.prepareStatement( SQL ); ps.setString( 1, "name"); rs = ps.executeQuery(); ……………………………………………

Esempio

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina Eramo Tecnologie dei Linguaggi di Programmazione

Eliminare gli oggetti JDBC (3)‏

while ( rs.next() ) { System.out.println( "ID: " + rs.getInt( "title_id" ) ); System.out.println( "Name: " + rs.getString( "name" ) ); System.out.println( "Title Kind ID: " +

rs.getInt( "title_kind_ID" ) ); System.out.println( "Description: " +

rs.getString( "description" ) ); System.out.println( "Author: " +

rs.getString( "author" ) ); System.out.println( "Isbn: " + rs.getString( "isbn" ) ); System.out.println( "-----------------------------------" ); } } catch ( ClassNotFoundException e ) { e.printStackTrace(); } catch ( SQLException e ) { e.printStackTrace(); } ……………………………………………

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina Eramo Tecnologie dei Linguaggi di Programmazione

Eliminare gli oggetti JDBC (4)‏

finally { if (rs!=null) { try { rs.close(); } catch (SQLException e) {/*Do Nothing*/} } if (ps!=null) { try { ps.close(); } catch (SQLException e) {/*Do Nothing*/} } if (conn!=null) { try { conn.close(); } catch (SQLException e) {/*Do Nothing*/} } } } }