Java DataBase Connectivity: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Aggiornamento Collegamenti esterni che non erano più validi |
|||
(35 versioni intermedie di 22 utenti non mostrate) | |||
Riga 1:
{{U|verso=da|pagina=JDBC (API nativa)|multi1=JDBC (protocollo di rete)|multi2=JDBC (protocollo nativo)|multi3=JDBC-ODBC Bridge|argomento=informatica|data=agosto 2024}}
'''JDBC''' (''Java DataBase Connectivity'')<ref>[http://java.sun.com/javase/technologies/database/ Java SE Technologies - Database<!-- Titolo generato automaticamente -->]</ref>, è un connettore per [[database]] che consente l'accesso alle basi di dati da qualsiasi [[programma (informatica)|programma]] scritto con il [[linguaggio di programmazione Java]], indipendentemente dal tipo di [[DBMS]] utilizzato. È costituita da una [[Application programming interface|API]], raggruppata nel [[package (Java)|package]] ''java.sql'', che serve ai [[client]] per connettersi a un [[database]]. Fornisce [[metodo (informatica)|metodi]] per interrogare e modificare i dati. È orientata ai [[database relazionali]] ed è Object Oriented. La [[piattaforma (informatica)|piattaforma]] [[Java 2 Platform, Standard Edition|Java 2 Standard Edition]] contiene le API JDBC, insieme all'implementazione di un [[JDBC-ODBC Bridge|bridge JDBC-ODBC]], che permette di connettersi a database relazionali che supportino [[ODBC]]. Questo driver è in codice nativo e non in Java.▼
▲In [[informatica]] '''JDBC''' (''Java DataBase Connectivity'')<ref>[http://java.sun.com/javase/technologies/database/ Java SE Technologies - Database<!-- Titolo generato automaticamente -->]</ref>, è un connettore e un driver per [[database]] che consente l'accesso
La [[piattaforma (informatica)|piattaforma]] [[Java 2 Platform, Standard Edition|Java 2 Standard Edition]] contiene le API JDBC, insieme all'implementazione di un [[JDBC-ODBC Bridge|bridge JDBC-ODBC]], che permette di connettersi a database relazionali che supportino [[ODBC]], che è in codice nativo e non in Java. Tipicamente ciascun DB ha il suo specifico driver JDBC per interfacciarsi con l'applicazione. Spesso i [[framework]] di persistenza in ambito Java (es. [[Hibernate]]) nella loro implementazione a più alto livello si interfacciano a più basso livello proprio con uno strato software JDBC.
== Architettura ==
L'architettura di JDBC, così come quella di ODBC, prevede
== Tipi di driver ==
Esistono driver free e commerciali per la maggior parte dei [[server]] di database relazionali. I driver possono essere di quattro tipi:
* [[JDBC-ODBC Bridge|Tipo 1]], il JDBC-ODBC Bridge
Riga 15 ⟶ 19:
== Panoramica dell'API ==
JDBC ammette che esistano diverse [[implementazione|implementazioni]] e vengano utilizzate dalla stessa [[applicazione (informatica)|applicazione]]. L'API fornisce un meccanismo che carica dinamicamente i driver appropriati e li registra nel JDBC Driver Manager. Esso funge da fabbrica di connessioni.
Le connessioni JDBC supportano la creazione e l'esecuzione delle [[istruzione (informatica)|istruzioni]]. Esse possono essere comandi [[SQL]] come INSERT, UPDATE, DELETE, interrogazioni come SELECT o chiamate a [[stored procedure]]. I tipi di istruzioni supportati sono:
Riga 23 ⟶ 27:
* ''Callable Statement'' - usati per chiamare le stored procedure.
I comandi di scrittura come INSERT, UPDATE e DELETE restituiscono un valore che indica quante righe sono state
Le interrogazioni ([[query]]) restituiscono un result set (classe ''ResultSet''). È possibile spostarsi nel result set riga per riga (tramite il metodo ''next()''). Si può accedere alle colonne di ogni singola riga chiamandole per nome o per numero. Il result set può essere costituito da un numero qualsiasi di righe. Esso comprende dei [[Metadato|metadati]] che indicano il nome, il tipo e le dimensioni delle colonne.
Esiste un'estensione di JDBC che permette, tra le altre cose, l'uso di result set scorribili e di [[Cursore (basi di dati)|cursori]] [[lato client]]. Si veda la [http://java.sun.com/j2se/1.4.2/docs/api/ documentazione] di [http://www.sun.com/ Sun Microsystems] per maggiori informazioni.
=== Le eccezioni ===
Riga 36 ⟶ 40:
Il metodo Class.forName() carica la classe del driver JDBC. La linea seguente carica il driver per ''mioDbms'' nell'applicazione.
<
Class.forName( "com.mioDbms.mioDriver" );
</syntaxhighlight>
Poi, il metodo DriverManager.getConnection() crea una connessione.
<
Connection conn = DriverManager.getConnection(
"jdbc:mioDbms:altri dati utili per il driver",
"mioLogin",
"miaPassword" );
</syntaxhighlight>
La stringa da utilizzare dipende dal driver JDBC che useremo. Inizia sempre con "jdbc:", il resto varia a seconda del prodotto scelto. Una volta stabilita la connessione, occorre passare una istruzione.
<
Statement stmt = conn.createStatement();
stmt.executeUpdate( "INSERT INTO miaTabella( nome ) VALUES ( 'andrea' ) " );
</syntaxhighlight>
I dati vengono prelevati dal database col classico meccanismo delle query. L'esempio sottostante mostra come creare ed eseguire un'interrogazione:
<
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery( "SELECT * FROM miaTabella" );
Riga 66 ⟶ 70:
rs.close();
stmt.close();
</syntaxhighlight>
È raro, però, che un [[programmatore]] Java scriva codice in questo stile. Il modo più diffuso è inserire la logica del database in una classe differente e passare le stringhe SQL già elaborate (magari derivanti anch'esse da un'altra classe) e la connessione ai metodi che ne hanno bisogno.
Un esempio di Prepared Statement. Si utilizza la connessione dell'esempio precedente.
<
try {
Riga 99 ⟶ 103:
// gestione delle eccezioni
}
</syntaxhighlight>
'''Seguono alcuni esempi di conversioni tra il DBMS e Java.'''
{| BORDER CELLSPACING="0" CELLPADDING="3"
Riga 187 ⟶ 191:
Per essere sicuri che una connessione sia chiusa correttamente, anche in caso di eccezione, conviene utilizzare la ''finally''. Inoltre bisogna prestare particolare attenzione a non sollevare ulteriori eccezioni nel blocco finally:
<
Connection con=null;
try {
Riga 198 ⟶ 202:
if (con != null) con.close();
}
</syntaxhighlight>
==Note==
<references/>
== Voci correlate ==
* [[DBMS]]
* [[ODBC]]
* [[SQL]]
* [[Cursore (basi di dati)]]
== Altri progetti ==
{{interprogetto}}
== Collegamenti esterni ==
*{{
*{{cita web|https://docs.oracle.com/en/java/javase/21/docs/api/java.sql/java/sql/package-summary.html|java.sql (Java SE 21 & JDK 21)|lingua=en}}
*{{
*{{
▲*{{en}} [http://java.sun.com/developer/technicalArticles//Database/dbaccessor/ DBAccessor: A JDBC Wrapper Package]
▲*{{en}} [http://java-source.net/open-source/database-engines List of Java Open Source Databases with JDBC drivers]
{{Controllo di autorità}}
{{Portale|Informatica}}
[[Categoria:
[[Categoria:Piattaforma Java]]
[[Categoria:
|