Java DataBase Connectivity: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
Aggiornamento Collegamenti esterni che non erano più validi
 
(13 versioni intermedie di 12 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}}
In [[informatica]] '''JDBC''' (''Java DataBase Connectivity'')<ref>[http://java.sun.com/javase/technologies/database/ Java SE Technologies - Database<!-- Titolo generato automaticamente -->]</ref>, è un connettore (''driver'') per [[database]] che consente l'accesso e la gestione della [[persistenza (informatica)|persistenza]] dei dati sulle basi di dati da qualsiasi [[programma (informatica)|programma]] scritto con il [[linguaggio di programmazione Java]], indipendentemente dal tipo di [[DBMS]] utilizzato. È costituito da un'[[Application programming interface|API]] [[object oriented]] orientata ai [[database relazionali]], raggruppata nel [[package (Java)|package]] ''java.sql'', che serve ai [[client]] per connettersi a un [[database]] fornendo i [[metodo (informatica)|metodi]] per interrogare e modificare i dati.
 
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 e la gestione della [[persistenza (informatica)|persistenza]] dei dati sulle basi di dati da qualsiasi [[programma (informatica)|programma]] scritto con il [[linguaggio di programmazione Java]], indipendentemente dal tipo di [[DBMS]] utilizzato. È costituito da un'[[Application programming interface|API]] [[object oriented]] orientata ai [[database relazionali]], raggruppata nel [[package (Java)|package]] ''java.sql'', che serve ai [[client]] per connettersi a un [[database]] fornendo i [[metodo (informatica)|metodi]] per interrogare e modificare i dati.
 
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 l’utilizzol'utilizzo di un “driver manager”, che espone alle applicazioni un insieme di interfacce standard e si occupa di caricare a “[[run-time]]” i driver opportuni per “pilotare” gli specifici DBMS. Le applicazioni Java utilizzano le "JDBC API" per parlare con il JDBC driver manager, mentre il driver manager usa le JDBC driver API per parlare con i singoli driver che pilotano i DBMS specifici. Esiste un driver particolare, il "JDBC-ODBC Bridge", che consente di interfacciarsi con qualsiasi driver ODBC in ambiente [[Windows]].
 
== 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 25 ⟶ 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 affettecoinvolte (inserite, modificate, cancellate) dallnell'istruzione. Essi non restituiscono altre informazioni.
 
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 [[CursoriCursore (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 38 ⟶ 40:
 
Il metodo Class.forName() carica la classe del driver JDBC. La linea seguente carica il driver per ''mioDbms'' nell'applicazione.
<sourcesyntaxhighlight lang=java>
Class.forName( "com.mioDbms.mioDriver" );
</syntaxhighlight>
</source>
Poi, il metodo DriverManager.getConnection() crea una connessione.
<sourcesyntaxhighlight lang=java>
Connection conn = DriverManager.getConnection(
"jdbc:mioDbms:altri dati utili per il driver",
"mioLogin",
"miaPassword" );
</syntaxhighlight>
</source>
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.
<sourcesyntaxhighlight lang=java>
Statement stmt = conn.createStatement();
stmt.executeUpdate( "INSERT INTO miaTabella( nome ) VALUES ( 'andrea' ) " );
</syntaxhighlight>
</source>
I dati vengono prelevati dal database col classico meccanismo delle query. L'esempio sottostante mostra come creare ed eseguire un'interrogazione:
<sourcesyntaxhighlight lang=java>
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery( "SELECT * FROM miaTabella" );
Riga 68 ⟶ 70:
rs.close();
stmt.close();
</syntaxhighlight>
</source>
È 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.
<sourcesyntaxhighlight lang=java>
try {
Riga 101 ⟶ 103:
// gestione delle eccezioni
}
</syntaxhighlight>
</source>
'''Seguono alcuni esempi di conversioni tra il DBMS e Java.'''
{| BORDER CELLSPACING="0" CELLPADDING="3"
Riga 189 ⟶ 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:
<sourcesyntaxhighlight lang=java>
Connection con=null;
try {
Riga 200 ⟶ 202:
if (con != null) con.close();
}
</syntaxhighlight>
</source>
 
==Note==
Riga 209 ⟶ 211:
* [[ODBC]]
* [[SQL]]
* [[CursoriCursore (basi di dati)]]
 
== Altri progetti ==
Riga 216 ⟶ 218:
== Collegamenti esterni ==
 
*{{en}}cita [httpweb|https://javadocs.sunoracle.com/docs/booksjavase/tutorial/post1.0jdbc/whatsnew/jdbcindex.html|Trail: SunJDBC tutorial]Database Access|lingua=en}}
*{{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/j2se/1.4.1/docs/api/ Sintassi delle API in Java 2 1.4.1]
*{{en}}cita [httpweb|https://javawww.sunoracle.com/developertechnical-resources/technicalArticlesarticles//Databasejavase/dbaccessor/ .html|DBAccessor: A JDBC Wrapper Package] |lingua=en}}
*{{en}} [http://java.sun.com/developer/technicalArticles//Database/dukesbakery/ Duke's Bakery - A JDBC Order Entry Prototype]
*{{en}}cita [httpweb|https://java-source.net/open-source/database-engines List of Java |Open Source DatabasesDatabase withEngines JDBCin drivers]Java|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:Linguaggio Java]]
[[Categoria:Piattaforma Java]]
[[Categoria:SoftwareDatabase permanagement basi di datisystem]]