Vai al contenuto

Primario: Sky Slate Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate Marble
Secondario: Sky Slate Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate Marble
Sfondo: Blank Waves Squares Notes Sharp Wood Rockface Leather Honey Vertical Triangles
Corsi di Laurea










ROX @ Unisa - Forum degli studenti di Ingegneria utilizza i cookie. Se prosegui la navigazione accetti il loro uso.    Accetto l'uso dei cookie
-->
Foto

Help me dubbio relazione tra Connection e DriverManager


  • Effettua l'accesso per rispondere
Questa discussione ha avuto 26 risposta/e

#1
ascal1

ascal1

    Advanced Member

  • Utente
  • StellaStellaStella
  • 138 Messaggi:
Ragazzi chi mi può aiutare a trovare una risposta alla mia domanda??
Sapendo che DriverManager da qualche parte implementa Connection e poi nel metodo statico getConnection(url) mi restituisce un oggetto dell'implementazione di Connection, ora come è possibile che accade questo se DriverManager non implementa Connection ma estende Object (vedi documentazione)??????? :bash:
Questo dubbio mi è sorto vedendo l'esempio LinkedList che implenta l'interfaccia List!!!!! :bash:
Grazie mille in anticipo!!!!!!!!!



#2
BOJACK89

BOJACK89

    Newbie

  • Utente
  • StellaStellaStella
  • 141 Messaggi:

Ragazzi chi mi può aiutare a trovare una risposta alla mia domanda??
Sapendo che DriverManager da qualche parte implementa Connection e poi nel metodo statico getConnection(url) mi restituisce un oggetto dell'implementazione di Connection, ora come è possibile che accade questo se DriverManager non implementa Connection ma estende Object (vedi documentazione)??????? :bash:
Questo dubbio mi è sorto vedendo l'esempio LinkedList che implenta l'interfaccia List!!!!! :bash:
Grazie mille in anticipo!!!!!!!!!


Il fatto è che DriverManager non implementa Connection, infatti tu usi getConnection() che ti restituisce un'istanza di un' implementazione per la classe Connection, implementazione che dipende dal particolare driver caricato.
'A vita è 'nu muorzo!

#3
2bet

2bet

    Advanced Member

  • Utente
  • StellaStellaStella
  • 56 Messaggi:
quando viene usato getConnection cosa e dove si implementa? e quando creiamo statement e preparedStatement ke sono cmq interfacce? potreste kiarire meglio cosa accade?
Sii tu stesso il cambiamento che vorresti nel mondo...
http://www.myspace.com/2betto

#4
Ale89

Ale89

    Advanced Member

  • Utente
  • StellaStellaStella
  • 225 Messaggi:
Robè io sono arrivato ad una conclusione, del tutto intuitiva della situazione...

Siccome Connection è 1 interfaccia e non è implementata dal DriverManager (vedi documentazione) l'unica soluzione è che questa viene implementata all'interno della classe JdbcOdbcDriver caricata con la Class.forName
Ora molto probabilmente all'interno di DriverManager verranno chiamati metodi del driver JdbcOdbc, e tra questi ne verrà chiamato 1 del tipo JdbcOdbcDriver.getConnection... Questo restituirà a DriverManager un oggetto dell'implementazione di Connection, che poi verrà passata al nostro applicativo attraverso a DriverManager.getConnection...

In poche parole l'implementazione del Connection viene fatta dal driver, il DriverManager la carica, e noi usando il drivermanager comunichiamo con il dbms...

Ovviamente queste sono ipotesi, chiedo correzioni se ho scritto qualcosa di sbagliato
Fieru cu biessi quiddhu ca tie 'uè biessi e none quiddhu ca l'auri te dicenu cu 'sinti! SUD SOUND SYSTEM - Nun me fannu paura
Hey Bobby Marley sing something to me. This world go crazy, it's an emergency! MANU CHAO - Mr Bobby

#5
2bet

2bet

    Advanced Member

  • Utente
  • StellaStellaStella
  • 56 Messaggi:
alex la tua spiegazione è l'unica ke mi sia riuscito a dare anke io....ma è possibile ke nessuno sappia con certezza cosa avviene? ma soprattutto se nessuno mai ce l'ha spiegato xkè è una delle domande più consuete all'esame??? lo fanno apposta a tralasciare gli argomenti per poi bocciarci all'esame? (vedi carte sintattiche a fondamenti)
speriamo ke le nostre ipotesi siano quelle giuste!
Sii tu stesso il cambiamento che vorresti nel mondo...
http://www.myspace.com/2betto

#6
Ale89

Ale89

    Advanced Member

  • Utente
  • StellaStellaStella
  • 225 Messaggi:
Ragazzi finalmente credo di aver avuto una risposta... Non so se la fonte è attendibile o meno , ho spulciato un topic sul sito della Sun...

I will take connection Connection and explain.
'Sun' has given this 'Connection' interface to the database driver vendors to implement it.
When you say, Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); it will register the driver. Basically all the driver implementation will have a static block inside which they will register that driver with the DriverManager.
When you call DriverManager.getConnection() method, it will return the Connection object implemented in that driver. For example in the case of JdbcOdbcDriver, it will return JdbcOdbcConnection object. If you see this JdbcOdbcConnection it will be implementing java.sql.Connection.
And this JdbcOdbcConnection is no more an interface, it is class.
public class JdbcOdbcConnection implements java.sql.Connection, etc,etc.
Since it is implementing java.sql.Connection it must implement all the methods that are declared in the java.sql.Connection interface.
You may think that you are working with java.sql.Connection but actually JdbcOdbcConnection is what giving you the services.
Similarly it is jdbc.oracle.thin.OracleConnection in case of OracleDriver.

Hope this clarifies your doubt.

Sudha


Ora il mio inglese maccheronico mi lascia intendere che le nostre "pippe mentali" siano fondate su qualcosa di vero :cheers:
In più in altri messaggi più avanti dice che il driver viene registrato in questo modo:

Each driver implementaion class (for example OracleDriver, JdbcOdbcDriver) will have a static block, inside which they will execute the statement
DriverManager.registerDriver(new driver_class()); This statement registers the driver with DriverManager. You can register as many drivers as you can



Il topic x intero è questo : http://forums.sun.co...threadID=275243
Fieru cu biessi quiddhu ca tie 'uè biessi e none quiddhu ca l'auri te dicenu cu 'sinti! SUD SOUND SYSTEM - Nun me fannu paura
Hey Bobby Marley sing something to me. This world go crazy, it's an emergency! MANU CHAO - Mr Bobby

#7
|system88|

|system88|

    Moderatore globale

  • Moderatore
  • 4133 Messaggi:
Ottimo ale... Ora l'ho capito anke io! Ti meriti un grz sincero.
Esistono solo due modi per scrivere un programma senza errori.
Ma e' solo il terzo modo quello che funziona realmente.

#8
ascal1

ascal1

    Advanced Member

  • Utente
  • StellaStellaStella
  • 138 Messaggi:
Ok...ho capito che tramite
Class.forName(...)
riusciamo a caricare il Driver che implementa poi la nostra interfaccia Connection.
Ho un piccolo dubbio:
Come fanno a comunicare il Driver e la classe DriverManager?????
C'è quest'ultimo passaggio che mi sfugge!!!!! :bash: :bash: :bash:

#9
ziofabrix

ziofabrix

    Newbie

  • Utente
  • StellaStellaStella
  • 251 Messaggi:
Pasquà tu vedila così( o almeno studiando questo è quello che ho capito io).
La classe drivermanager rappresenta un implementazione di un oggetto offerto dalla Api( jdbc o odbc) che è appunto il drivermanager.Questo nella realtà serve a gestire i driver ed è in esso che vengono registrati i vari driver.
la registrazione può avvenore esplicitamente (con il class.forname()) oppure istanziando un oggetto vero e proprio di tipo driver e usando il metodo registerdriver() del drivermanager.ora una volta che tu hai registrato il driver vuol dire che driver manager contiene al suo interno le implementazioni di tutti quei metodi che usi(sia di connection,che di statement,che prep....e via dicendo) per lo specifico dbms.
a questo punto quando tu crei una connection ci passi l'url in cui oltre a specificare il database,specifichi anche il driver che vuoi usare...
questo è tutto..
spero che le informazioni siano innanzitutto giuste e poi chiarificatrici :ciao:
Non preoccupatevi per il futuro:se la caverà benissimo anche senza di voi

#10
Ale89

Ale89

    Advanced Member

  • Utente
  • StellaStellaStella
  • 225 Messaggi:
La mia idea invece (vedi citazione dalla Sun) è che il Driver all'interno contiene un'istruzione che fa DriverManager.registerDriver(arg).. Ora chiedo conferma da chi capisce meglio di me l'inglese!

EDIT: Successivamente caricato il Driver con class.forName, verrà eseguito questo metodo (ricordo richiamato all'interno del driver), ed ecco perchè si parla di caricamento dinamico del driver!
Fieru cu biessi quiddhu ca tie 'uè biessi e none quiddhu ca l'auri te dicenu cu 'sinti! SUD SOUND SYSTEM - Nun me fannu paura
Hey Bobby Marley sing something to me. This world go crazy, it's an emergency! MANU CHAO - Mr Bobby

#11
ziofabrix

ziofabrix

    Newbie

  • Utente
  • StellaStellaStella
  • 251 Messaggi:
Alè su questo non sono d'accordo....infatti l'arg di driverManager.registerdriver(new jdbcodbcDriver())...ovvero passiamo al metodo l'istanza del driver...
Non preoccupatevi per il futuro:se la caverà benissimo anche senza di voi

#12
Ale89

Ale89

    Advanced Member

  • Utente
  • StellaStellaStella
  • 225 Messaggi:
Fabrì e che significa quello che sta scritto la?? Io con l'inglese arrivo fino ad un certo punto, mi sembrava di aver capito quello!

Anche perchè tu con class.forName mi pare che carichi solo in memoria la classe, ma non dici al driverManager di poterla gestire??? Sbaglio?
Fieru cu biessi quiddhu ca tie 'uè biessi e none quiddhu ca l'auri te dicenu cu 'sinti! SUD SOUND SYSTEM - Nun me fannu paura
Hey Bobby Marley sing something to me. This world go crazy, it's an emergency! MANU CHAO - Mr Bobby

#13
f.savarese

f.savarese

    Advanced Member

  • Utente
  • StellaStellaStella
  • 106 Messaggi:
Raga è come dice fabrizio.Noi abbiamo un drivermanager,nel nostro caso è proprio ODBC offerto da windows.Quando andiamo a caricare il driver nel DriverManager carichiamo un driver che serva per tradurre le richieste JDBC in richieste ad ODBC(DriverManager)[Da notare che in questa fase del caricamento driver non facciamo riferimento al DBMS].Ora il DriverManager ha al suo interno le implementazioni di tutte le interfacce necessarie a JDBC per sfruttare il meccanismo del CLI e noi in realtà da java non comunichiamo affatto col DB ma solo con ODBC.è ODBC stesso che poi si preoccupa di interfacciarsi con i vari DBMS e col particolare DBMS da nooi scelto nell'URL.Fra l'altro è proprio questa la differenza che c'è fra la seconda architettura e quella del 4 tipo dove li il driver che andiamo a caricare è implementato dal fornitore del DBMS direttamente per JDBC e nn per il nostro driver Manager, che a quel punto risulta essere superfluo
Ora l'unica cosa che mi lascia un po' perplesso è che se il mio DriverManager è ODBC che vuol dire che estende Object ? Da notare che sono entrambe affermazioni vere, il fatto che ODBC sia un DriverManager è scritto sul libro e non me lo sono inventato..

#14
ziofabrix

ziofabrix

    Newbie

  • Utente
  • StellaStellaStella
  • 251 Messaggi:
Francè io nn ti dovrei risp...ma lo faccio..come tu sai ogni classe in java estende object......ricordi oop prrr ...dai skerzo cmq....
Non preoccupatevi per il futuro:se la caverà benissimo anche senza di voi

#15
f.savarese

f.savarese

    Advanced Member

  • Utente
  • StellaStellaStella
  • 106 Messaggi:
Ma io fin qui ci arrivavo...ahahah...intendevo dire in che modo sono relazionati il driver manager ODBC e la clase DriverManager cioè mi sembrano due definizioni diverse o semplicemente hanno lo stesso nome tanto per fare un richiamo e non c'è nessuna relazione fra le due cose da un punto di vista fisico?...e cmq cosa + importante è corretto il ragionamento di cui sopra..?

#16
ziofabrix

ziofabrix

    Newbie

  • Utente
  • StellaStellaStella
  • 251 Messaggi:
Questa è una cosa specifica di oop..l'obiettivo delle P.O. è di creare classi che rappresentino le funzionalità offerte da uno specifico elemento della realtà..allora se DriverManager gestisce i driver ad esso sarà associata una classe in java per la gestione dei driver..ecco tutto.
Per il ragionamento fatto sopra mi trovo :asd: ....bravo :ahsisi:
Non preoccupatevi per il futuro:se la caverà benissimo anche senza di voi

#17
f.savarese

f.savarese

    Advanced Member

  • Utente
  • StellaStellaStella
  • 106 Messaggi:
Ok sta bene...Grazie per il bravo :D

#18
Ale89

Ale89

    Advanced Member

  • Utente
  • StellaStellaStella
  • 225 Messaggi:
Ragazzi secondo me state confondendo o sto confondendo io... ODBC è il driverManager si ma non di Java ma dei linguaggi sviluppati da Microsoft... Il driverManager di Java è solo JDBC, o meglio la classe driverManager
Fieru cu biessi quiddhu ca tie 'uè biessi e none quiddhu ca l'auri te dicenu cu 'sinti! SUD SOUND SYSTEM - Nun me fannu paura
Hey Bobby Marley sing something to me. This world go crazy, it's an emergency! MANU CHAO - Mr Bobby

#19
f.savarese

f.savarese

    Advanced Member

  • Utente
  • StellaStellaStella
  • 106 Messaggi:
Cosa vuol dire :_ODBC è il driverManager si ma non di Java ma dei linguaggi sviluppati da Microsoft ? JDBC è un package, e ovviamente questo lo sai, che ti permette di comunicare con i DBMS tramite il meccanismo del CLI, ovvero in questo package ci sono tutte le classi [per la maggiore interfacce] che permettono questo meccanismo.
Ora abbiamo il driverManager ODBC che permette appunto la gestione dei driver di tutti i particolari dbms e il driverManager [classe java] che consente di caricare i driver per interfacciarsi o con odbc o direttamente con un particolare dbms proprio grazie al metodo getConnection.
Sono ovviamente due cose diverse ma come diceva zioFabrix ODBC è un DriverManager e la classe DriverManager nient'altro è che la trasposizione in classe di un elemento della realtà di interesse.Questa classe ti permette di gestire i vari driver che carichi e di stabilire la connessione di tuo interesse o con ODBC o con un determinato DBMS a seconda dell'url, che come sai è composto da un protocollo(JDBC),un driver che decidi di usare e un nome di DB.Il driver che decidi di usare lo devi,ovviamente, aver preventivamete registrato nella classe DriveManager di java col metodo statico Class.forName.Ora potrei dilungarmi ancora ma credo che il punto sia stato centrato: la differenza fra la classe e ODBC (Intesi come DriverManager) e nei diversi driver che gestiscono (il primo la connessione con ODBC o con un DBMS a seconda di se scegli la seconda o la quarta architettura e il secondo i driver di connessione ODBC/DBMS a seconda ovviamente di se usi o no JDBC/ODBC BRIDGE)...
Spero di non avere aggiunto dubbi su dubbi.... :viaaa:

#20
Ale89

Ale89

    Advanced Member

  • Utente
  • StellaStellaStella
  • 225 Messaggi:
Francè non ho capito bene quello che dici..
Spiego a te come a tutti gli altri quello che volevo dire io, in modo da poter essere corretto, evitando così eventuali flop all'eventuale esame di martedi...

Jdbc è un MODULO di Java per comunicare con Java con le basi di dati;

Odbc è un MODULO di Microsoft per comunicare con le basi di dati da una piattaforma Microsoft ( Windows ? )

Odbc essendo sviluppato da Microsoft (molto prima della nascita di Java) è diventato uno standard(come tutti i prodotti Microsoft), ovvero tutti i produttori di DBMS per poter rendere utilizzabili le loro basi di dati anche al di fuori del DBMS, forniscono un driver x far si che la basi di dati possa essere manipolata, definita anche attraverso ODBC...
Ecco il perchè dell'architettura ponte JDBC-ODBC ( Microsoft o Sun hanno voluto a loro volta fornire un driver(JdbcOdbcDriver) per la comunicazione tra questi due moduli) in quanto alcuni produttori di DBMS hanno voluto sviluppare il solo driver per ODBC e non per JDBC ...
Successivamente con lo sviluppo di Java, molti produttori di DBMS hanno voluto sviluppare oltre al driver per ODBC anche quello per JDBC in modo da evitare il passaggio sul ponte prrr Architettura 4

Ora JdbcOdbcDriver è un driver, in particolare vedendo attentamente la documentazione possiamo ricavare 2 informazioni:

1) E' un'implementazione dell'interfaccia Connection;
2) E' un'implementazione dell'interfaccia Driver;

In seguito arriviamo all'altro punto: Come si carica e come si registra un driver?

Allora il driver si carica attraverso il metodo Class.forName(URL), successivamente a nostra insaputa, questo viene anche registrato in quanto c'è scritto nella documentazione, che ogni nuovo driver caricato deve richiamare al suo interno il metodo statico DriverManager.registerDriver(new class_driver()), ovvero all'interno della classe JDBCODBCDriver vi sarà un metodo tra quelli implementati, che richiama questo metodo, questo affinchè il driver si presenti al DriverManger.
Fieru cu biessi quiddhu ca tie 'uè biessi e none quiddhu ca l'auri te dicenu cu 'sinti! SUD SOUND SYSTEM - Nun me fannu paura
Hey Bobby Marley sing something to me. This world go crazy, it's an emergency! MANU CHAO - Mr Bobby




Leggono questa discussione 0 utenti

0 utenti, 0 ospiti, 0 utenti anonimi