Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    132

    Java DB

    ciao a tutti, ho un problema con Apache Derby, uso NetBeans .
    Credo di aver installato tutto, ed in effetti il programma funziona sulla mia macchina, ma quando lo sposto su un'altra macchina non trova il db.
    Ho impostato le " Java DB Properties" :
    Java DB Installation : C:\Programmi\Sun\JavaDB
    Database Location : cartella del mio programma che voglio spostare
    In effetti nella "Database Location" compare la cartella con il nome del mio database, ma non riesco a capire se contenga veramente le tabelle o cosa. Mi sembra come se la collocazione del database la sappia NetBeans, ma non la mia applicazione.
    Altro problema, prima di poter accedere al database, devo connetterlo da "Services-Drivers", come faccio a connetterlo da codice?
    Posto il metodo che uso per leggere i dati da db, che ripeto, funziona solo sulla macchina dove ho creato il DB.
    Qualche suggerimento ?



    codice:
     public void  leggiDataBase() {
            try {
                String ComboScelta = (String) ComboDbTab.getSelectedItem();
                String driver = "org.apache.derby.jdbc.EmbeddedDriver";
                Class.forName(driver).newInstance();
                String protocol =      "jdbc:derby://localhost:1527/infoDb;user=***;password=***;create=true";
                Connection conn = DriverManager.getConnection(protocol);
                java.sql.Statement exe = conn.createStatement();
                String QueryString = "SELECT * from APP."+ComboScelta;
                ResultSet rs = null;
                rs = exe.executeQuery(QueryString);
                int cont=0;
                 for (int i = 0; i < arrayDb.length; i++) {
                arrayDb[i]=null;
              }
                while (rs.next()) {
                 arrayDb[cont]=rs.getString(1) + "   ---  " + rs.getString(2);
                 cont=cont+1;
                }
               
            } catch (SQLException ex) {
                Logger.getLogger(DbView.class.getName()).log(Level.SEVERE, null, ex);
            } catch (ClassNotFoundException ex) {
                Logger.getLogger(DbView.class.getName()).log(Level.SEVERE, null, ex);
            } catch (InstantiationException ex) {
                Logger.getLogger(DbView.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IllegalAccessException ex) {
                Logger.getLogger(DbView.class.getName()).log(Level.SEVERE, null, ex);
            }
       }
    Grazie.

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    51
    Nella macchina dove fai partire il programma hai avviato il JavaDB?

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    132
    Non capisco bene cosa intendi, mi spiego meglio.
    Sulla macchina dove ho creato il db va tutto bene tranne il fatto che devo ogni volta connettere il database tramite NetBeans "Services-Drivers".
    Vorrei mettere il programma con il suo bel exe in computer "vergini", senza installare nulla.
    Comunque non trova il db neppure se importo il progetto in un NetBeans di un altro computer con installati tutti i driver.

    Grazie.

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    51
    Quando usi quel JavaDB con Netbeans non fai altro che usare Derby in versione server quindi la comunicazione col database avviene tramite la porta 1527. Quando poi porti il tuo programma in un'altra macchina, il programma cerca di connettersi alla porta 1527 della macchina in cui si trova, quindi all'indirizzo localhost:1527, ma non essendonci nessun JavaDB in esecuzione su quella porta in quella macchina ti da errore.
    Per creare il database embedded devi usare queste due righe di codice:
    codice:
    Class.forName("org.apache.derby.jdbc.EmbeddedDriver"); 
    
    String url = "jdbc:derby:prova;create=true;user=admin;password=pass";
    La prima riga carica il driver per la versione embedded di derby, la seconda crea un database di nome "prova", crea un utente con nome "admin" e password "pass", se create è true crea il db se non esiste già.

    Credo che sia proprio quello che cerchi.

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    132
    molte grazie, mi sembra di aver capito, ma mi manca qualche passaggio.
    Ho provato, e mi pare che si connetta, ma mi da errore durante la query :

    Con codice
    codice:
    String QueryString = "SELECT * from APP.ALTRE";
    mi da errore : "java.sql.SQLSyntaxErrorException: Tabella/Vista 'APP.ALTRE' non esiste."
    ovviamente la tabella "ALTRE" esiste.
    Con codice
    codice:
    String QueryString = "SELECT * from ALTRE";
    mi da errore : "java.sql.SQLSyntaxErrorException: lo schema 'ANDREA' non esiste."

    Se al posto di APP. metto ANDREA, nome dello schema dice sempre che non esiste.

    propietà database :
    Display name : jdbc:derby://localhost:1527/infoDb [andrea on ANDREA]
    Database URL: jdbc:derby://localhost:1527/infoDb
    Driver : org.apache.derby.jdbc.ClientDriver
    Schema ANDREA

    codice:
    public void  leggiDataBaseJAVATab() {
            try {
    
                Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
                String url = "jdbc:derby:infoDb;create=true;user=***;password=***";
    
                String ComboScelta = (String) ComboDbTab.getSelectedItem();
    
                Connection conn = DriverManager.getConnection(url);
               
                java.sql.Statement exe = conn.createStatement();
    
                String QueryString = "SELECT * from ALTRE";
                       //  oppure
               String QueryString = "SELECT * from APP.ALTRE";
                      //  oppure
               String QueryString = "SELECT * from ANDREA.ALTRE";
    
                ResultSet rs = null;
                rs = exe.executeQuery(QueryString);         
                 
                while (rs.next()) {               
                 
    ...........
    Grazie : )

  6. #6
    ma la tabella ALTRE sotto che schema l'hai creata ?

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    51
    puoi postare le righe di codice dove crei le tabelle?

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    132
    funziona !! grazie mi hai aiutato di brutto : )

    Allora .., prima della tua risposta le tabelle le creavo da NetBeans, suppongo che così facendo le creavo "residenti sulla mia macchina" (jdbc:derby://localhost:1527/infoDb) o no ?
    Dopo ho scritto un metodo per crearle da codice, e pare funzioni. Quindi da codice creo il db embedded (jdbc:derby:infoDb), non è più localhost, ho capito bene ?
    Ultima domanda, spero, il db embedded si crea solo da codice? non che sia un gran problema, giusto per curiosità.

    codice:
       public void  avviaDB() throws ClassNotFoundException, SQLException {
    
                Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
                String url = "jdbc:derby:infoDb;create=true;user=***;password=***";
                String ComboScelta = (String) ComboDbTab.getSelectedItem();
                Connection conn = DriverManager.getConnection(url);
    
                java.sql.Statement exe = conn.createStatement();
    
                String QueryString = "CREATE TABLE APP."+ComboScelta+" ( COD  VARCHAR(10),DESCRIZIONE VARCHAR(60),ELIMINATO VARCHAR(1))";
                int rs1 ;
                rs1 = exe.executeUpdate(QueryString);
                }
    Sembra che funzioni, unica cosa posso crearlo una sola volta, altrimenti mi da errore "java.sql.SQLException: Table/View 'ALTRE' esiste già in Schema 'APP'."
    Devo trovare un modo per far si che se lo trova già creato passi oltre, ma di direi che il più è fatto.

    Grazie ancora

  9. #9
    Il db embedded non si crea solo da codice java (se questo che intendi) perchè ti basta puntare da qualsiasi programma per l'interrogazione di db, per esempi Squirrel, a un url costruito in questo modo : jdbc:derby:<Percorso assoluto dove creare il database>;create=true.
    Cmq per vedere se uno schema o tabella esiste già puoi usare queste due query :
    codice:
    select 1 FROM SYS.SYSSCHEMAS where schemaname = ?;
     select 1 From SYS.SYSTABLES where tablename = ?;

  10. #10
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    132
    ah , ok. E visto che sei così gentile ne approfitto : ).
    Ho capito, anche se ancora non ho fatto molte prove, che il db basta crearlo una volta.
    Considerando che la mia applicazione deve essere distribuita (con il db incluso) a vari utenti, è meglio creare il db e poi distribuirla, o scrivere un metodo che controlla ogni volta se il db esiste. Mi sembra uguale, che dici ?
    Grazie.

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.