Pagina 1 di 5 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 48
  1. #1

    Connessione "continua" a mysql

    scusate il titolo ma nn sapevo come metterlo.
    in sostanza io vari file sui quali ho le istruzioni per:
    -leggere
    -inserire
    -eliminare
    -modificare
    dati da un db mysql.
    io avvio la mia interfaccia e richiamo le varie funzioni coi vari eventi.
    ad es.
    codice:
    package operazioni_database;
    
    import java.sql.*;
    import javax.swing.*;
    
    public class LeggiArea {
    
        static final String DRIVER = "com.mysql.jdbc.Driver";
        static final String DATABASE_URL = "jdbc:mysql://..........";
    
        public static String leggi() {
            String line = "";
            int numcolonne = 0;
            String nomecolonne = "";
            Connection conn = null;
            Statement stmt = null;
            ResultSet rs = null;
            ResultSetMetaData rsmd = null;
            try {
                Class.forName(DRIVER);
                conn = DriverManager.getConnection(DATABASE_URL);
                stmt = conn.createStatement();
                rs = stmt.executeQuery("select * from movimenti");
                rsmd = rs.getMetaData();
                numcolonne = rsmd.getColumnCount();
                for (int i = 1; i <= numcolonne; i++) {
                    nomecolonne += rsmd.getColumnLabel(i) + ": ";
                }
                String i = "";
                String e = "";
                String u = "";
                String c = "";
                String d = "";
                while (rs.next()) {
                    i = rs.getString(1);
                    e = rs.getString(2);
                    u = rs.getString(3);
                    c = rs.getString(4);
                    d = rs.getString(5);
                    line += i + ": " + e + ", " + u + ", " + c + ", " + d + "\n";
                }
            } catch (SQLException e) {
                JOptionPane.showMessageDialog(null, e.getMessage());
            } catch (ClassNotFoundException e) {
                JOptionPane.showMessageDialog(null, e.getMessage());
            } finally {
                try {
                    rs.close();
                    stmt.close();
                    conn.close();
                } catch (Exception e) {
                    JOptionPane.showMessageDialog(null, e.getMessage());
                }
                return nomecolonne + "\n" + line;
            }
        }
    }
    però così per ogni operazione il programma deve connettersi al db.
    io invece vorrei un comportamento alla client ftp: in alto ho le caselle da riempire e il tasto connetti.
    una volta conesso faccio tutte le operazioni e poi se clicco sul tasto disconnetti o chiudo il programma la connessione si chiude.
    è possibile ottenere un comportamento del genere??

  2. #2
    Utente di HTML.it L'avatar di desa
    Registrato dal
    Oct 2008
    Messaggi
    569
    Basta non chiamare le close(), no?

  3. #3
    ho capito ma quando io avvio il programma nn ho nessuna classe che si connette.
    magari prima aggiungo un record, o magari prima lo modifico e poi li leggo.
    posso anche levare close() dappertutto ma sempre tutti i dati di connessione deve tenere perchè nn so quale operazione faccio prima.
    è molto più comodo e veloce connettersi all'inizio e fare tutte le operazioni.
    senza contare che poi così mi posso connettere solo a un db.
    e se replicassi il db a un altro indirizzo e volessi connettermi a quello??
    mica posso creare una versione per ogni db al quale vorrei connettermi.

  4. #4
    Utente di HTML.it L'avatar di desa
    Registrato dal
    Oct 2008
    Messaggi
    569
    Posso dirti che non ho capito niente?
    Sinceramente non veo dove sia il problema: quando avvii l'applicazione (o quando opportuno) crei la connessione al database e la lasci aperta fino a quando non hai completato tutte le operazioni che devi fare. Solo a quel punto la chiudi

  5. #5
    Ma è esattamente quello che ho chiesto.
    Nn so come creare una connessione al db inserendo manualmente i dati in textfield.
    Proprio questo volevo sapere.....

  6. #6
    Utente di HTML.it L'avatar di desa
    Registrato dal
    Oct 2008
    Messaggi
    569
    Allora non mi è chiaro il problema.
    Se non sai fare una connessione a un DB, allora mi chiedo chi ha scritto il codice che hai postato, e in particolare le istruzioni

    codice:
    Class.forName(DRIVER);
    conn = DriverManager.getConnection(DATABASE_URL);
    stmt = conn.createStatement();
    rs = stmt.executeQuery("select * from movimenti");
    Se non sai leggere i dati da un campo di testo...
    Beh, ad esempio avrai un JButton con associato un ActionListener, al cui interno recupererai i dati sotto forma di stringhe tramite delle getText() sui JTextField coinvolti. Tali stringhe saranno i parametri da passare ai metodi di connessione di cui sopra.

  7. #7
    provo a spiegarmi meglio.
    tu li ti connetti e fai una query.
    quello lo so fare.
    io vorrei una connessione senza fare query e roba varia.
    hai presente come funziona un client ftp??
    diciamo quel comportamento la.
    io dico tramite l'evento a che db connettersi insrendo manualmente indirizzo, password, ecc.
    poi faccio tutte le operazioni che mi pare:
    -inserisco
    -leggo
    -elimino
    -.....

  8. #8
    Utente di HTML.it L'avatar di desa
    Registrato dal
    Oct 2008
    Messaggi
    569
    Ancora non mi è chiara la questione.
    Nel codice che hai postato ti connetti, fai una query, leggi i dati e ti disconnetti... tutto nello stesso metodo. Ma è così perchè il metodo è scritto così: nulla ti vieta di progettare la tua applicazione in modo da connettersi al DB ed eseguire tutte le operazioni che devi fare, magari inframmezzando il tutto con la pausa pranzo.

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    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.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  10. #10
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    Da quel che ricordo da un corso di formazione, mi risulta però che:

    1. se sullo stesso database accedono più applicazioni, è bene che ciascuna rilasci la connessione al database non appena possibile. Tenere impegnata la connessione senza utilizzarla, quando magari altre applicazioni non riescono ad accedere perché non trovano una connessione utilizzabile non è cosa buona e giusta.

    2. non è che si crei e si distrugga una connessione, il database (nel corso però si parlava espressamente di Oracle) ha un pool di connessioni già pronte all'uso che assegna a chi ne faccia richiesta. Il getConnection semplicemente ne restituisce una.

    Quindi, anche se il punto 1 non centrasse una mazza con il caso in questione (unico o pochi applicativi che accedono contemporaneamente al database), il punto 2 dovrebbe significare che in termini di tempo non ci guadagni molto.
    Io ricordo di aver fatto una applicazione che faceva qualche migliaio di query nell'arco di qualche decina di minuti, aprendo una sola connessione.
    Con una certa frequenza la connessione andava comunque persa per errori "del Socket" che non ho mai risolto, se non riaprendo una nuova connessione al volo, quando uno di questi errori si presentava.
    "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

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 © 2025 vBulletin Solutions, Inc. All rights reserved.