Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442

    java connessione a un db

    Ciao, sapete dirmi se è possibile fare in modo che un database venga creato direttamente dall'applicazione? Non riesco a farlo perché quando creo l'oggetto connection esso richiede un URL di un DB già esistente. Non socome venirne fuori... Mentre sql ha un'istruzione che crea il db se non esiste. Grazie.

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Che DBMS stai usando?
    Perché ad esempio con Derby basta aggiungere al connection url l'opzione create=true
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442
    Sto usando Mysql e il driver JDBC...

  4. #4
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442
    Ok! Una domanda ma perché questa istruzione:
    int Result=s.executeUpdate("CREATE DATABASE databasename");

    e non semplicemente

    s.executeUpdate("CREATE DATABASE databasename");

    ?

    Comunque funziona in entrambi i modi. Ovviamente ho messo la clausola IF NOT EXISTS.
    Però mi è venuto un altro dubbio: e se il database già esiste togliendo l'url dalla connection lui come fa a sapere a quale db collegarsi? Nel mio caso getConnection() e createDb() sono due metodi separati che invoco sequenzialmente.
    edit infatti non va: se oltre a mettere l'istruzione di creazione del database metto anche quella di creazione della tabella mi dice
    java.sql.SQLException: No database selected

    Mi pareva troppo facile...

    Metto i pezzi di codice incriminati:

    codice:
        public static Connection getConnection() throws SQLException {
            return connection = DriverManager.getConnection(url, admin, adm_passwd);
        }
        /**
         * Crea il database se non esistente
        */
        public static void createDb () throws SQLException {
                st=connection.createStatement();
                st.executeUpdate("CREATE DATABASE IF NOT EXISTS TableManager");
                st.executeUpdate("CREATE TABLE IF NOT EXISTS Products");
        }
    Grazie!
    Ultima modifica di Jamie04; 14-03-2014 a 20:51

  6. #6
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Quote Originariamente inviata da Jamie04 Visualizza il messaggio
    Ok! Una domanda ma perché questa istruzione:
    int Result=s.executeUpdate("CREATE DATABASE databasename");

    e non semplicemente

    s.executeUpdate("CREATE DATABASE databasename");

    ?

    Comunque funziona in entrambi i modi. Ovviamente ho messo la clausola IF NOT EXISTS.
    Ovvio che funziona in entrambi i casi: il metodo viene chiamato comunque, quello che cambia è che nel primo caso ti salvi il valore di ritorno.

    Il significato di quel valore lo trovi nella documentazione: http://docs.oracle.com/javase/7/docs...lang.String%29



    Quote Originariamente inviata da Jamie04 Visualizza il messaggio
    Però mi è venuto un altro dubbio: e se il database già esiste togliendo l'url dalla connection lui come fa a sapere a quale db collegarsi? Nel mio caso getConnection() e createDb() sono due metodi separati che invoco sequenzialmente.
    edit infatti non va: se oltre a mettere l'istruzione di creazione del database metto anche quella di creazione della tabella mi dice
    java.sql.SQLException: No database selected

    Mi pareva troppo facile...
    Immagino che una volta creato il database ti tocchi aprire una nuova connessione in cui questa volta ti colleghi al db appena creato.
    Ma non ho mai provato, in genere le connessioni le ottengo via jndi...
    Ultima modifica di Alex'87; 14-03-2014 a 21:49
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442
    Quote Originariamente inviata da Alex'87 Visualizza il messaggio
    Immagino che una volta creato il database ti tocchi aprire una nuova connessione in cui questa volta ti colleghi al db appena creato.
    Ma non ho mai provato, in genere le connessioni le ottengo via jndi...
    ho provato a farlo modificando così il codice:

    codice:
    public static void createDb () throws SQLException {
                st=connection.createStatement();
                st.executeUpdate("CREATE DATABASE IF NOT EXISTS Mydb");
                connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/Mydb", admin, adm_passwd);
                st.executeUpdate("CREATE TABLE IF NOT EXISTS Products");
        }
    ma mi dà lo stesso errore

  8. #8
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    ehm... st lo hai creato usando la precedente connessione... Ovviamente devi usare quella nuova

    (tradotto: devi creare uno statement con la nuova connessione)
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442
    Grazie ora funziona! Ora qualche domanda di carattere più generale. Infatti trovo decine di guide in giro ma nessuna che spieghi le cose da un punto di vista più ampio. Sono tutte molto concentrate su come fare determinati passaggi ma manca the bigger picture...

    1) Il mio programma salverà/recupererà/manipolerà i dati immessi sul db... Ogni dato che viene inserito nel db deve avere una sua classe che lo descriva come oggetto, coi classici metodi getter e setter...ne possono servire altri?
    2) Per cui, ogni volta che faccio l'inserimento di un prodotto nel db (da apposita maschera), deve succedere che si crea un nuovo oggetto (con la new) e si manda l'apposita istruzione sql per salvarlo nel db? Io ho fatto una finestra in cui premendo il pulsante 'nuovo' si attivano i campi relativi, quando l'utente preme su 'salva' deve succedere che il contenuto dei vari campi viene inviato all'istruzione che si occupa di salvarli nel db?
    3) Ho strutturato il mio programma in modo che quando viene lanciato si apre sempre la connessione al database e viene chiusa quando si esce dal programma (anche se ci sono almeno un paio di maschere in cui non si deve interagire col database). Nelle classi che si occupano di effettuare l'inserimento dei dati nel db non devo quindi più aprire una connessione e istanziare un oggetto connection, no? Mi basta inviare gli statement degli update?
    Avrai notato dalle domande che sono niubba di questi argomenti, se hai qualche guida che spieghi passo passo come costruire e interagire (magari graficamente) un db con java senza dare troppe cose per scontate, te ne sarei grata...
    Grazie!!

  10. #10
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Quote Originariamente inviata da Jamie04 Visualizza il messaggio
    Grazie ora funziona!
    Di nulla

    Quote Originariamente inviata da Jamie04 Visualizza il messaggio
    1) Il mio programma salverà/recupererà/manipolerà i dati immessi sul db... Ogni dato che viene inserito nel db deve avere una sua classe che lo descriva come oggetto, coi classici metodi getter e setter...ne possono servire altri?
    Altri cosa? Metodi?
    In genere per contenere i dati si usano dei POJO (= Plain Old Data Object): si tratta di oggetti stupidi che contengono solo i campi e i rispettivi getter e setter (e il costruttore, se necessario), niente business logic.

    Quote Originariamente inviata da Jamie04 Visualizza il messaggio
    2) Per cui, ogni volta che faccio l'inserimento di un prodotto nel db (da apposita maschera), deve succedere che si crea un nuovo oggetto (con la new) e si manda l'apposita istruzione sql per salvarlo nel db?
    Io ho fatto una finestra in cui premendo il pulsante 'nuovo' si attivano i campi relativi, quando l'utente preme su 'salva' deve succedere che il contenuto dei vari campi viene inviato all'istruzione che si occupa di salvarli nel db?
    E' una possibilità.

    Quote Originariamente inviata da Jamie04 Visualizza il messaggio
    3) Ho strutturato il mio programma in modo che quando viene lanciato si apre sempre la connessione al database e viene chiusa quando si esce dal programma (anche se ci sono almeno un paio di maschere in cui non si deve interagire col database). Nelle classi che si occupano di effettuare l'inserimento dei dati nel db non devo quindi più aprire una connessione e istanziare un oggetto connection, no? Mi basta inviare gli statement degli update?
    No, non ti serve una nuova connection, puoi benissimo riciclare quella che hai già. Se il db lo usano anche altri però occhio a non lockare le tabelle (se fosse questo il caso, apri una connessione solo all'occorrenza e chiudila quando fatto la query)

    Riguardo lo statement, ti consiglio di passare ai PreparedStatement e di crearne uno nuovo ogni volta (questi sono precompilati e più sicuri quando fai query con parametri con valori particolari (apicetti ecc)

    Quote Originariamente inviata da Jamie04 Visualizza il messaggio
    Avrai notato dalle domande che sono niubba di questi argomenti, se hai qualche guida che spieghi passo passo come costruire e interagire (magari graficamente) un db con java senza dare troppe cose per scontate, te ne sarei grata...
    Grazie!!
    Non conosco guide particolari ma mi pareva che sul sito Oracle ci fosse della documentazione di livello base.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

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.