[RISOLTO][[Java] Connettersi a Postgre sql da java

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Archimede Pitagorico
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 861
Iscrizione: domenica 22 aprile 2007, 19:51

[RISOLTO][[Java] Connettersi a Postgre sql da java

Messaggio da Archimede Pitagorico »

Carissimi,
dietro insistente consiglio di diverse persone sto trasferendo i databade delle mie web application da MySql a PostgreSql; l'esportazione db da un formato all'altro, con alcuni tool, è riuscita perfettamente. Ho anche correttamente caricato il driver nell'applicazione. Ora come posso modificare la seguente classe di connessione per adattarla al nuovo sistema? Grazie a tutti!

Codice: Seleziona tutto


public boolean connetti() {
      connesso = false;
      try {

         // Carico il driver JDBC per la connessione con il database MySQL
         Class.forName("com.mysql.jdbc.Driver");

         // Controllo che il nome del Database non sia nulla
         if (!nomeDB.equals("")) {

            // Controllo se il nome utente va usato o meno per la connessione
            if (nomeUtente.equals("")) {

               // La connessione non richiede nome utente e password
               db = DriverManager.getConnection("jdbc:mysql://localhost/" + nomeDB);
            } else {

               // La connessione richiede nome utente, controllo se necessita anche della password
               if (pwdUtente.equals("")) {

                  // La connessione non necessita di password
                  db = DriverManager.getConnection("jdbc:mysql://localhost/" + nomeDB + "?user=" + nomeUtente);
               } else {

                  // La connessione necessita della password
                  db = DriverManager.getConnection("jdbc:mysql://localhost/" + nomeDB + "?user=" + nomeUtente + "&password=" + pwdUtente);
               }
            }

            // La connessione è avvenuta con successo
            connesso = true;
         } else {
            System.out.println("Manca il nome del database");
            System.out.println("Scrivere il nome del database da utilizzare all'interno del file \"config.xml\"");
            System.exit(0);
         }
      } catch (Exception e) { errore = e.getMessage(); }
      return connesso;
   }
Ultima modifica di Archimede Pitagorico il giovedì 1 maggio 2008, 10:22, modificato 1 volta in totale.
Avatar utente
AlexSistemiFree
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1373
Iscrizione: venerdì 15 dicembre 2006, 9:43

Re: [Java] Connettersi a Postgre sql da java

Messaggio da AlexSistemiFree »

Scaricati il driver.

  Class.forName("org.postgresql.Driver"); //load the driver

b = DriverManager.getConnection("jdbc:postgresql://localhost/" + nomeDB);
prampa
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 652
Iscrizione: lunedì 26 febbraio 2007, 14:04

Re: [Java] Connettersi a Postgre sql da java

Messaggio da prampa »

occhio che fare una select o una insert su postgres e mysql non è propriamente uguale. Non basta solo modificare la connessione. Ad esempio su postgres la tabella con il nome USER non la puoi utilizzare, su postgres sono previste le sequences mentre su mysql ci sono i campi con autoincremento, etc etc. E' per questo motivo che la parte che si preoccupa di accedere al db deve essere isolata dal resto, avere i parametri per la connessione esterni (context.xml) e non scolpiti al suo interno, avere una interfaccia pubblica, o roba simile, che accetta parametri dal lato web e richiama una classe specifica per accedere al db in uso e ritorna i dati in una classe di comunicazione web/db. Allora sì che è solo aprire una connessione con uno o l'altro db.....
Poi anche lato server le procedure o le function sono diverse e devono essere riscritte.
Comunque nel zip dei driver postgres trovi esempi di connessione.
Per il resto anche secondo me con java/j2ee è più performante postgres ed è più database rispetto a mysql, senza togliere nulla a quest'ultimo!!!!!e poi occupa molta meno ram rispetto a mysql (io ho solo 512 di ram...) e ti rendi conto il numero di connessioni che apri e lasci aperte (almeno sotto linux, non so sotto windows). Che script hai usato per la conversione? io uso uno script scritto in perl e funziona abbastanza bene.
ciao
Stoned
Prode Principiante
Messaggi: 154
Iscrizione: mercoledì 17 gennaio 2007, 17:38

Re: [Java] Connettersi a Postgre sql da java

Messaggio da Stoned »

prampa ha scritto: occhio che fare una select o una insert su postgres e mysql non è propriamente uguale. Non basta solo modificare la connessione. Ad esempio su postgres la tabella con il nome USER non la puoi utilizzare, su postgres sono previste le sequences mentre su mysql ci sono i campi con autoincremento, etc etc. E' per questo motivo che la parte che si preoccupa di accedere al db deve essere isolata dal resto, avere i parametri per la connessione esterni (context.xml) e non scolpiti al suo interno, avere una interfaccia pubblica, o roba simile, che accetta parametri dal lato web e richiama una classe specifica per accedere al db in uso e ritorna i dati in una classe di comunicazione web/db. Allora sì che è solo aprire una connessione con uno o l'altro db.....
Poi anche lato server le procedure o le function sono diverse e devono essere riscritte.
Dio benedica Hibernate  (rotfl)
prampa ha scritto: Per il resto anche secondo me con java/j2ee è più performante postgres ed è più database rispetto a mysql, senza togliere nulla a quest'ultimo!!!!!e poi occupa molta meno ram rispetto a mysql (io ho solo 512 di ram...) e ti rendi conto il numero di connessioni che apri e lasci aperte (almeno sotto linux, non so sotto windows).
Chissà se dopo l'acquisizione da parte di Sun mysql farà un bel salto....
prampa
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 652
Iscrizione: lunedì 26 febbraio 2007, 14:04

Re: [Java] Connettersi a Postgre sql da java

Messaggio da prampa »

Citato da: prampa su 27 Aprile, 2008, 21:23:05
occhio che fare una select o una insert su postgres e mysql non è propriamente uguale. Non basta solo modificare la connessione. Ad esempio su postgres la tabella con il nome USER non la puoi utilizzare, su postgres sono previste le sequences mentre su mysql ci sono i campi con autoincremento, etc etc. E' per questo motivo che la parte che si preoccupa di accedere al db deve essere isolata dal resto, avere i parametri per la connessione esterni (context.xml) e non scolpiti al suo interno, avere una interfaccia pubblica, o roba simile, che accetta parametri dal lato web e richiama una classe specifica per accedere al db in uso e ritorna i dati in una classe di comunicazione web/db. Allora sì che è solo aprire una connessione con uno o l'altro db.....
Poi anche lato server le procedure o le function sono diverse e devono essere riscritte.


Dio benedica Hibernate 

concordo.....
Citato da: prampa su 27 Aprile, 2008, 21:23:05
Per il resto anche secondo me con java/j2ee è più performante postgres ed è più database rispetto a mysql, senza togliere nulla a quest'ultimo!!!!!e poi occupa molta meno ram rispetto a mysql (io ho solo 512 di ram...) e ti rendi conto il numero di connessioni che apri e lasci aperte (almeno sotto linux, non so sotto windows).


Chissà se dopo l'acquisizione da parte di Sun mysql farà un bel salto....
chissa', potenzialità ce ne sono molte....non ho ancora pero' capito dove la Sun voglia arrivare....
Ultima modifica di prampa il lunedì 28 aprile 2008, 9:21, modificato 1 volta in totale.
Avatar utente
AlexSistemiFree
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1373
Iscrizione: venerdì 15 dicembre 2006, 9:43

Re: [Java] Connettersi a Postgre sql da java

Messaggio da AlexSistemiFree »

Dio benedica Hibernate 
Ho qualche dubbio, teoricamente concordo, ma nella pratica ci sono ancora problemini.
Avatar utente
ryuujin
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1032
Iscrizione: venerdì 14 aprile 2006, 2:57
Sesso: Maschile
Località: Pescara
Contatti:

Re: [Java] Connettersi a Postgre sql da java

Messaggio da ryuujin »

AlexSistemiFree ha scritto:
Dio benedica Hibernate 
Ho qualche dubbio, teoricamente concordo, ma nella pratica ci sono ancora problemini.
perche'? io con hibernate mi trovo benissimo... (anche se preferisco le linq di .net 3.5. Spero presto faranno qualcosa anche in JAVA)

r.
http://blog.spicydev.it
"Chi riceve un'idea da me, ricava conoscenza senza diminuire la mia; come chi accende la sua candela con la mia, riceve luce senza lasciarmi
al buio". - Thomas Jefferson
Avatar utente
AlexSistemiFree
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1373
Iscrizione: venerdì 15 dicembre 2006, 9:43

Re: [Java] Connettersi a Postgre sql da java

Messaggio da AlexSistemiFree »

Su Hibernate mi sono messo da poco, diciamo problemi collaterali che in fase di sviluppo danno da pensare e mi lasciano perplesso dato che chiaramente quando mi metto per fare un sistema desidero che sia stabile.
Es. se tenti di usare le annotazioni in hibernate, essendo quella parte in beta, non saprei se vale la pena oppure meglio continuare ad aspettare.
Se usi hibernate insieme a tomcat spunta il mitico errore permgen (io uso netbeans ma pure chi usa eclipse nota questo problema), il problema pare sia in realtà di java (non ha importanza avere la versione), fatto sta che emerge quando si combina insieme hibernate+tomcat.
Questo problema si presenta soprattutto durante la fase di sviluppo però è lo stesso una bella seccatura.
Sono tutte queste cose, prese nel loro insieme, che mi lasciano perplesso.
Stoned
Prode Principiante
Messaggi: 154
Iscrizione: mercoledì 17 gennaio 2007, 17:38

Re: [Java] Connettersi a Postgre sql da java

Messaggio da Stoned »

AlexSistemiFree ha scritto: Su Hibernate mi sono messo da poco, diciamo problemi collaterali che in fase di sviluppo danno da pensare e mi lasciano perplesso dato che chiaramente quando mi metto per fare un sistema desidero che sia stabile.
Es. se tenti di usare le annotazioni in hibernate, essendo quella parte in beta, non saprei se vale la pena oppure meglio continuare ad aspettare.
Se usi hibernate insieme a tomcat spunta il mitico errore permgen (io uso netbeans ma pure chi usa eclipse nota questo problema), il problema pare sia in realtà di java (non ha importanza avere la versione), fatto sta che emerge quando si combina insieme hibernate+tomcat.
Questo problema si presenta soprattutto durante la fase di sviluppo però è lo stesso una bella seccatura.
Sono tutte queste cose, prese nel loro insieme, che mi lasciano perplesso.
Beh, considerando che hibernate è uno dei framework più utilizzati nel mondo java (anche se, naturalmente, non può essere considerato perfetto), secondo me ti preoccupi un po' troppo  (good)
Archimede Pitagorico
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 861
Iscrizione: domenica 22 aprile 2007, 19:51

Re: [Java] Connettersi a Postgre sql da java

Messaggio da Archimede Pitagorico »

Aiuto, che cosa ho creato? Ho modificato la classe di connessione come da vostre inidcazioni ma vedo il terribilissimo errore null pointer exception che tante ore ha sottratto al mio sonno! Eppure query & c nella mia applicazione sono davvero semplici, dubito possano essere la causa di quella orrenda scritta. Per completezza vi copio tutto sotto. Vi prego, fate che io non mi penta della scelta di Postgre visto che tutti me ne hanno parlato benissimo!

Ecco la classe di connessione modificata come da vostre dritte:

Codice: Seleziona tutto

public DAOManager(String nomeDB, String nomeUtente, String pwdUtente) {
      this.nomeDB = nomeDB;
      this.nomeUtente = nomeUtente;
      this.pwdUtente = pwdUtente;
      connesso = false;
      errore = "";
   }

   // Apre la connessione con il Database
   public boolean connetti() {
      connesso = false;
      try {

         // Carico il driver JDBC per la connessione con il database MySQL
         Class.forName("org.postgresql.Driver");

         // Controllo che il nome del Database non sia nulla
         if (!nomeDB.equals("")) {

            // Controllo se il nome utente va usato o meno per la connessione
            if (nomeUtente.equals("")) {

               // La connessione non richiede nome utente e password
               db = DriverManager.getConnection("jdbc:postgresql://localhost/" + nomeDB);
            } else {

               // La connessione richiede nome utente, controllo se necessita anche della password
               if (pwdUtente.equals("")) {

                  // La connessione non necessita di password
                  db = DriverManager.getConnection("jdbc:postgresql://localhost/" + nomeDB + "?user=" + nomeUtente);
               } else {

                  // La connessione necessita della password
                  db = DriverManager.getConnection("jdbc:postgresql://localhost/" + nomeDB + "?user=" + nomeUtente + "&password=" + pwdUtente);
               }
            }

            // La connessione è avvenuta con successo
            connesso = true;
         } else {
            System.out.println("Manca il nome del database");
            System.out.println("Scrivere il nome del database da utilizzare all'interno del file \"config.xml\"");
            System.exit(0);
         }
      } catch (Exception e) { errore = e.getMessage(); }
      return connesso;
   }

Ed eccovi un esempio di query presa da una classe business che genera quell'errore:

Codice: Seleziona tutto

String myPsw = myAccountDAOMet.DAOQueryToString("select password from tbl_user where utente='"+User+"'").trim();
Archimede Pitagorico
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 861
Iscrizione: domenica 22 aprile 2007, 19:51

Re: [Java] Connettersi a Postgre sql da java

Messaggio da Archimede Pitagorico »

nb naturalmente il db sul quale faccio queste prove è locale, quindi quando ho configurato PGSql ho inserito localhost. Ma credo lo immaginavate già.
Avatar utente
AlexSistemiFree
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1373
Iscrizione: venerdì 15 dicembre 2006, 9:43

Re: [Java] Connettersi a Postgre sql da java

Messaggio da AlexSistemiFree »

Immagino il problema sia sulla tabella tbl_user che magari non esiste, ti è già stato accennato alcune differenze esistenti tra i database.

Nota:
Per il discorso hibernate, si alla fine lo userò, poi chissà che non chieda qui, mi rompe registrarmi al loro forum, se la tirano un po' con il discorso dei crediti ...
Archimede Pitagorico
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 861
Iscrizione: domenica 22 aprile 2007, 19:51

Re: [Java] Connettersi a Postgre sql da java

Messaggio da Archimede Pitagorico »

Ma certo che esiste, avevo già letto i commenti.
Archimede Pitagorico
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 861
Iscrizione: domenica 22 aprile 2007, 19:51

Re: [Java] Connettersi a Postgre sql da java

Messaggio da Archimede Pitagorico »

Scusa, mi sfugge l'attinenza tra l'errore che ho trovato ed il fatto che mi erano state accennate differenze tra i db... Ho importato le strutture dei db ed anche i dati con un tool che ha funzionato senza fare una piega (db convert) e poi io stesso ho verificato tabella per tabella l'integrità di struttura e dati...
Archimede Pitagorico
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 861
Iscrizione: domenica 22 aprile 2007, 19:51

Re: [Java] Connettersi a Postgre sql da java

Messaggio da Archimede Pitagorico »

Ragazzi, nonostante tutti i miei sforzi ancora nulla. Sono nelle vostre mani... Grazie!
Avatar utente
AlexSistemiFree
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1373
Iscrizione: venerdì 15 dicembre 2006, 9:43

Re: [Java] Connettersi a Postgre sql da java

Messaggio da AlexSistemiFree »

localhost:5432
prampa
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 652
Iscrizione: lunedì 26 febbraio 2007, 14:04

Re: [Java] Connettersi a Postgre sql da java

Messaggio da prampa »

ma i driver dove  li hai copiati?
Archimede Pitagorico
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 861
Iscrizione: domenica 22 aprile 2007, 19:51

Re: [Java] Connettersi a Postgre sql da java

Messaggio da Archimede Pitagorico »

Ragazzi siete la mia salvezza. Prampa i driver sono stati copiati, sotto forma di jar, in lib sotto web inf esattamente come avevo fatto per i driver di mysql tant'è che poi compaiono correttamente tra le librerie dell'applicazione. Riguardo poi la modifica alla porta del localhost, dove dovrei inserirla? Ma poi quel numero di porta funzionerà anche in remoto? Vabbé provo subito e vi dico. Cosa non farei senza di voi.
Archimede Pitagorico
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 861
Iscrizione: domenica 22 aprile 2007, 19:51

Re: [Java] Connettersi a Postgre sql da java

Messaggio da Archimede Pitagorico »

NO! Anche inserendo quel numero su localhost vedo ancora quell'errore, tipico di quando ai tempi di mysql il db non era visto. Cosa ho fatto di male stavolta? Non ho altro codice oltre a quello che vi ho postato! Dove può essere lo sbaglio?
prampa
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 652
Iscrizione: lunedì 26 febbraio 2007, 14:04

Re: [Java] Connettersi a Postgre sql da java

Messaggio da prampa »

i driver li hai sotto la lib del progetto, e va bene, ma quando crei il war? te li porti dietro? secondo me non li trova

edit: prova a copiarli ache sotto la lib di tomcat
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 6 ospiti