Pagina 2 di 5 primaprima 1 2 3 4 ... ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 48
  1. #11
    Originariamente inviato da Andrea1979
    Quoto desa in tutto quanto concerne l'esposizione del tuo problema: non si capiva niente.

    Secondo, vediamo se quel che ho capito porta da qualche parte:

    codice:
    Connection conn = null;
    ...
    Class.forName(DRIVER);
    conn = DriverManager.getConnection(DATABASE_URL);
    Questo apre la connessione al database, e, se tutto va bene, in conn hai quanto ti serve per sparare query al database. Invece di eseguire quel:

    codice:
    Class.forName(DRIVER);
    conn = DriverManager.getConnection(DATABASE_URL);
    in ogni metodo (spreco inutile), metti tutto da qualche parte dove venga eseguito una sola volta (metodo di inizializzazione, costruttore, static block che non ho mai avuto il piacere di usare, etc etc) e poi lavori sul tuo conn dovunque serva nella classe senza andarlo a ricreare ogni volta.
    è questo che vorrei ottenere.
    quindi in sostanza a me basta un file del genere da richiamare nei vari file dove eseguo le query giusto?
    codice:
    import java.sql.*;
    import javax.swing.*;
    
    public class Connessione {
    
        static final String DRIVER = "com.mysql.jdbc.Driver";
        static final String DATABASE_URL = "jdbc:mysql://.............";
    
        public static void main(String args[]) {
            Connection conn = null;
            try {
                Class.forName(DRIVER);
                conn = DriverManager.getConnection(DATABASE_URL);
            } catch (SQLException e) {
                JOptionPane.showMessageDialog(null, e.getMessage());
            } catch (ClassNotFoundException e) {
                JOptionPane.showMessageDialog(null, e.getMessage());
            }
        }
    }

  2. #12
    Utente di HTML.it L'avatar di desa
    Registrato dal
    Oct 2008
    Messaggi
    569
    Se chiami "file" le classi java c'è davvero qualcosa che non va...

    Se nonostante le giuste obiezioni di Pastore12 decidi che ancora vuoi procedere con questo metodo, provo a rispiegarti quanto Andrea1979 ed io stiamo cercando di dirti.
    Hai detto che hai una interfaccia grafica, giusto? Allora farai così: in questa interfaccia ci metti due pulsanti. Uno si chiama "connetti" ed esegue le istruzioni

    codice:
    Class.forName(DRIVER);
    conn = DriverManager.getConnection(DATABASE_URL);
    memorizzando "conn" in una variabile globale; l'altro si chiama disconnetti e semplicemente si occupa di chiudere la connessione (stessa operazione che devi assicurarti di fare quando chiudi la tua applicazione).

  3. #13
    Originariamente inviato da desa
    Se chiami "file" le classi java c'è davvero qualcosa che non va...
    l'ho chiamato file solo per cercare di specificare che avesso messo tutto in una classe separata da tutte le altre (un file .java creato ad hoc).
    anche questa è una classe:
    codice:
    public class QuickSort
    {
        public static void main(String [] args)
        {
            int [] a={5,4,6,7,8,0};
            QSort(a,0,a.length-1);
        }
        
        
        public static void QSort(int [] A, int i, int r)
        {
            if(i>=r)
                return;
            else{
                int n=partition(A,i,r);
                QSort(A,i,n);
                QSort(A,n+1,r);
            }
            
        }
    ed esistono classi innestate, innestate anonime, ma nn penso centrino con quello che vorrei ottenere.
    volevo solo specificare la separazione del codice di connessione dalle varie query.

    Se nonostante le giuste obiezioni di Pastore12 decidi che ancora vuoi procedere con questo metodo, provo a rispiegarti quanto Andrea1979 ed io stiamo cercando di dirti.
    Hai detto che hai una interfaccia grafica, giusto? Allora farai così: in questa interfaccia ci metti due pulsanti. Uno si chiama "connetti" ed esegue le istruzioni

    codice:
    Class.forName(DRIVER);
    conn = DriverManager.getConnection(DATABASE_URL);
    memorizzando "conn" in una variabile globale; l'altro si chiama disconnetti e semplicemente si occupa di chiudere la connessione (stessa operazione che devi assicurarti di fare quando chiudi la tua applicazione).
    ma perchè io e te nn ci capiamo?
    è praticamente dall'inizio che cerco di chiederti questo.
    nell'ultimo post ho solo chiesto se andava bene quanto scritto o no.
    visto che mi è stato più volte detto che dal punto di vista del design il mio codice è sempre ripetitivo e poco ordinato, avevo solo pensato di creare una classe specifica per la connessione, e di nn mettere il tutto nell'evento di un pulsante.
    ma se mi dici che così va bene farò così.
    grazie!!

  4. #14
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    Scusa... forse mi son perso qualche pezzo qua e là...

    Parto da questa:
    Codice PHP:
    import java.sql.*;
    import javax.swing.*;

    public class 
    Connessione {

        static final 
    String DRIVER "com.mysql.jdbc.Driver";
        static final 
    String DATABASE_URL "jdbc:mysql://.............";

        public static 
    void main(String args[]) {
            
    Connection conn null;
            try {
                Class.
    forName(DRIVER);
                
    conn DriverManager.getConnection(DATABASE_URL);
            } catch (
    SQLException e) {
                
    JOptionPane.showMessageDialog(nulle.getMessage());
            } catch (
    ClassNotFoundException e) {
                
    JOptionPane.showMessageDialog(nulle.getMessage());
            }
        } 
    Io ci vedrei meglio qualcosa come:

    Codice PHP:
    public class Connessione {

        static final 
    String DRIVER "com.mysql.jdbc.Driver";
        static final 
    String DATABASE_URL "jdbc:mysql://.............";

        public static 
    Connection getConnection () throws SQLException {
            
    Connection conn null;
            ....
            return 
    conn;
        } 
    Poi se vuoi farci il main per testare, ci sta anche bene.

    A questo punto, ogni volta che ti serve una connessione, invochi il metodo di utilità esposto dalla classe Connessione.

    quindi:

    Codice PHP:
        public static String leggi() {
            
    String line "";
            
    int numcolonne 0;
            
    String nomecolonne "";
            
    Connection conn null;
            
    Statement stmt null;
            
    ResultSet rs null;
            
    ResultSetMetaData rsmd null;
            try {
                
    conn Connessione.getConnection();
                
    stmt conn.createStatement();
                
    rs stmt.executeQuery("select * from movimenti");
                
    rsmd rs.getMetaData();
                ...
            }
            .... 
    "Ethics are to me something private. Whenever you use it as an argument for why somebody_else should do something, you’re no longer being ethical, you’re just being a sanctimonious dick-head"
    Linus Torvalds

  5. #15
    no io avevo messo main perchè nn sapevo quello che avevi scritto te.
    così funziona tutto.
    ma ancora un problemino.
    i parametri di connessione (user,pass,db) sono preimpostati nella classe Connessione.
    se io invece volessi metterli a mano in 4 jtextfield e poi mandarglieli tramite bottone?
    è possibile?
    ho creato le 4 textfield e l'evento (per ora vuoto) del bottone.
    ma nn so come far interagire le due cose.

  6. #16
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    La cosa ha un senso se i tuoi 4 jtextfield hanno tutti connessioni con parametri diversi, altrimenti ti conviene lasciare tutto nella classe di Utility che ti restituisce la Connection.

    E' per una questione di pulizia e semplicità, se un giorno cambi parametri di connessione ti tocca andare a metter mano ovunque hai impostato i parametri. Così invece dovresti modificare solo una classe.

    Più pulito ancora potrebbe essere scrivere i parametri in un file di configurazione... magari criptato...
    "Ethics are to me something private. Whenever you use it as an argument for why somebody_else should do something, you’re no longer being ethical, you’re just being a sanctimonious dick-head"
    Linus Torvalds

  7. #17
    la cosa è questa:
    -ho due db
    -questi due db hanno la stessa struttura me contenuti diversi
    -cambiano sia di indirizzo che di user e pass.
    il programma (se nn fose appunto per le connessioni) va bene per entrambi.
    o creo due versioni (una per db) oppure passo i parametri della connessione in qualche modo.
    avevo pensato:
    -metto 4 textfield: una per lo user, una per la pass, uno per il db e uno per l'indirizzo
    -metto un tasto di connessione con un evento che richiama il codice per la connessione passandogli i parametri delle text field a seconda del db al quale mi connetto.

    posso anche creare due versioni, ma a sto punto se nn era troppo difficile vorrei la seconda soluzione anche per imparare qualcosa in più.

  8. #18
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    Se è per esercizio, fa pure la tua pagina di login, magari una select ("db1" - "db2") che imposti automaticamente i parametri di connessione nei textfield.

    Poi passi i parametri al database.

    Per complicarti ancora di più la vita, i parametri di connessione li scrivi in un file di properties che vai a leggere per popolare l'interfaccia grafica (la select che ti ho suggerito, o i valori di default dei textfield)
    "Ethics are to me something private. Whenever you use it as an argument for why somebody_else should do something, you’re no longer being ethical, you’re just being a sanctimonious dick-head"
    Linus Torvalds

  9. #19
    Utente di HTML.it L'avatar di desa
    Registrato dal
    Oct 2008
    Messaggi
    569
    volevo solo specificare la separazione del codice di connessione dalle varie query.
    Sì, ma comunque non ha senso: puoi avere diecimila classi in diecimila files distinti, oppure tutte nello stesso file... E' una questione progettuale e logica, dal punto di vista architetturale dell'applicazione - che è quanto stiamo discutendo qui - è assolutamente irrilevante.
    In ogni caso, si tratta solo di un errore banale di nomenclatura: non perdiamoci altro tempo, no?

    ma perchè io e te nn ci capiamo?
    è praticamente dall'inizio che cerco di chiederti questo.
    Non ci capiamo perchè non ti sei spiegato abbastanza bene. Non sono stato il solo a dirlo, giusto? Le informazioni sono venute fuori poco a poco, ma se delinei chiaramente il problema fin dall'inizio risparmi un sacco di tempo a tutti (te compreso) e ottieni un aiuto più preciso e puntuale.

    nell'ultimo post ho solo chiesto se andava bene quanto scritto o no.
    Vero, non ti ho detto "no, non va bene" ma ti ho fornito direttamente una possibile correzione.

    visto che mi è stato più volte detto che dal punto di vista del design il mio codice è sempre ripetitivo e poco ordinato, avevo solo pensato di creare una classe specifica per la connessione, e di nn mettere il tutto nell'evento di un pulsante.
    Quindi il problema è questo: vuoi che il codice di connessione sia localizzato in un solo punto (quindi, in un solo metodo) facilmente richiamabile senza doverlo ridondare ogni volta. E questa è una cosa molto sensata, e Pastore12 ha postato un esempio di come puoi fare.
    Però vedi che non era chiaro? Fino a qualche post fa - e lo testimoniano gli altri interventi che sono stati fatti - sembrava che tu volessi aprire una connessione a un DB e tenerla aperta per tutta la vita del programma...

  10. #20
    Utente di HTML.it L'avatar di desa
    Registrato dal
    Oct 2008
    Messaggi
    569
    Comunque, per fare quanto vuoi, basta che realizzi il metodo getConnection() così:

    codice:
    public class Connessione
    {
      public static Connection getConnection (String driver, String database, String username, String password) throws SQLException
      {
        Connection conn = null;
     . . .
    // istruzioni di connessione
    . . .
        return conn;
      }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.