Programmazione Java: JDBC

annuncio pubblicitario
Programmazione Java:
JDBC
Romina Eramo
[email protected]
http://www.di.univaq.it/romina.eramo/tlp
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
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
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
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
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
Java Database Connectivity (JDBC) (2)‫‏‬
Esempio dei 3 passi precedenti:
public void connectToAndQueryDatabase(String username, String password) {!
!
crea un oggetto
Connection con = DriverManager.getConnection(!
"jdbc:myDriver:myDatabase",! DriverManager per
connettersi ad un database
username,!
crea un'istanza di un oggetto
password);!
driver e accedere al
Statement che effettua la
!
database
query
SQL al database
!
Statement stmt = con.createStatement();!
ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table1");!
!
crea un'istanza di un oggetto ResultSet
while (rs.next()) {!
che recupera i risultati della query
int x = rs.getInt("a");!
String s = rs.getString("b");!
float f = rs.getFloat("c");!
}!
infine esegue un semplice
}!
ciclo while, che recupera
e visualizza i risultati
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
Java Database Connectivity (JDBC) (3)‫‏‬
›  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
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
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/packagesummary.html
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
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
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
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
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
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
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
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
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
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
DBMS proprietary
protocol
DBMS
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
Client machine
Database server
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
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
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
Java appletor
HTML browser
Client machine
(GUI)
HTTP, RMI, CORBA, or other calls
Application
Server (Java)
JDBC
Server machine
(business logic)
DBMS proprietary
protocol
DBMS
Database server
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
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)‫‏‬
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
SQL (2)‫‏‬
INTEGER O INT
Di solito intero a 32 bit
SMALLINT
Di solito intero a 16 bit
NUMERIC(M,N),
DECIMAL(M,N) DEC(M, N)
Numero decimale a lunghezza fissa con m cifre totali e n
cifre dopo il punto decimale
FLOAT(N)
Numero a virgola mobile con precisione di n cifre binarie
REAL
Di solito virgola mobile a 32bit
DOUBLE
Di solito virgola mobile a 64bit
CHARACTER(N) CHAR(N)
Stringa di lunghezza fissa n
VARCHAR(N)
Stringa di lunghezza variabile max n
BOOLEAN
Booleano
DATE
Data del calendario dipendente dall’implementazione
TIME
Ora del giorno dipendente dall’implementazione
TIMESTAMP
Data e ora del giorno dipendente dall’implementazione
BLOB
Oggetto binario large
CLOB
Oggetto carattere large
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
Classi e interfacce (1)‫‏‬
SQLPermission
package java.sql
<<Interface>>
Statement
DriverManager
<<Interface>>
Connection
DriverPropertyInfo
<<Interface>>
Driver
<<Interface>>
PreparedStatement
<<Interface>>
ResultSet
<<Interface>>
CallableStatement
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
Classi e interfacce (1)‫‏‬
package java.sql
<<Interface>>
Statement
DriverManager
<<Interface>>
Connection
DriverPropertyInfo
<<Interface>>
Driver
<<Interface>>
PreparedStatement
<<Interface>>
ResultSet
<<Interface>>
CallableStatement
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
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)‫‏‬
…
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
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
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
Classi e interfacce (4)‫‏‬
package java.sql
SQLException
SQLWarning
BatchUpdateException
DataTruncation
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
›  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
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
Classi e interfacce (5)‫‏‬
package java.sql
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
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, ….
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
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
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
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
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
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));
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
Passi
›  Registrare un driver
›  Stabilire una connessione al DB
›  Creare uno statement
›  Eseguire l’SQL
›  Processare il risultato
›  Eliminare gli oggetti JDBC
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
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
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
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
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
Registrare un driver (3)‫‏‬
Esempio 1
public class TestLoading1 {
public static void main( String[] args ) {
try {
Class.forName("com.mysql.jdbc.Driver" );
}
catch ( ClassNotFoundException e ) {
e.printStackTrace();
}
}
}
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
Registrare un driver (4)‫‏‬
Esempio 2
public class TestLoading2 {
public static void main( String[] args ) {
System.out.println( "welcome!" );
}
}
C:> java –Djdbc.drivers=com.mysql.jdbc.Driver
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
Registrare un driver (5)‫‏‬
Esempio 3
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();
}
}
}
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
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)
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
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
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
Stabilire una connessione al DB (3)‫‏‬
Esempio
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 “”
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
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
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
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
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
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
...
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
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");
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
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
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
Processare il risultato
String
CHAR, VARCHAR, or LONGVARCHAR
java.math.BigDecimal
NUMERIC
Boolean
BIT
Integer
INTEGER
Long
BIGINT
Float
REAL
Double
DOUBLE
byte[]
BINARY, VARBINARY, or LONGVARBINARY
java.sql.Date
DATE
java.sql.time
TIME
java.sql.Timestamp
TIMESTAMP
Clob
CLOB
Blob
BLOB
Array
ARRAY
Struct
STRUCT
Ref
REF
Java class
JAVA_OBJECT
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
Processare il risultato (4)‫‏‬
http://java.sun.com/j2se/1.4.2/docs/guide/jdbc/getstart/mapping.html
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
Processare il risultato (5)‫‏‬
http://java.sun.com/j2se/1.4.2/docs/
guide/jdbc/getstart/mapping.html
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
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
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
Processare il risultato
Esempio 1
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 );
…………………………………………………
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
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();
}
}
}
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
Processare il risultato
Esempio 2
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();
……………………………………………
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
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();
}
}
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
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();
}
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
Eliminare gli oggetti JDBC (2)‫‏‬
Esempio
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();
……………………………………………
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
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();
}
……………………………………………
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
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*/}
}
}
}
}
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
Scarica