Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    connessione db access sotto linux

    ciao a tutti! devo connettermi a un database access sotto linux vi posto un po di codice con l'errore di connessione...

    classe connessione:
    codice:
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    
    package ircdownload;
    
    /*
     * Classe dedicata alla gestione del Database.
     * Gestisce l'apertura e la chiusura della connessione col Database
     * Fornisce i metodi per l'esecuzione delle query sul Database
     */
    import java.sql.*;
    import java.util.Vector;
    
    public class Database {
    
       private String nomeDSN;         // Nome DSN dell'origine dati ODBC
       private String[][] attributi;   // Insieme di attributi da usare per la connessione
       private String errore;          // Stringa contenente un eventuale messaggio di errore
       private Connection db;          // Oggetto che rappresenta la connessione col DB
       private boolean connesso;       // Flag che indica se il DB è connesso o meno
    
       public Database(String nomeDSN) {
          this.nomeDSN = nomeDSN;
          attributi = new String[0][0];
          connesso = false;
       }
    
       public Database(String nomeDSN, String [][] attributi) {
          this.nomeDSN = nomeDSN;
          this.attributi = attributi;
          connesso = false;
       }
    
       public boolean connetti() {
          connesso = false;
          try {
    
             // Carico il bridge JDBC-ODBC per la connessione con il database
             Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    
             String conString = "jdbc:odbc:" + nomeDSN;   // Il nome del DSN può anche essere vuoto!!
    
             // Controllo se ci sono attributi ausiliari da usare per la connessione
             if (attributi.length > 0) {
    
                // Uso gli attributi per la connessione
                for (int i=0; i<attributi.length; i++) {
                   conString += ";" + attributi[i][0] + "=" + attributi[i][1];
                }
             }
    
             // Effettuo la connessione
             db = DriverManager.getConnection( conString );
    
             // La connessione è avvenuta con successo
             connesso = true;
          } catch (Exception e) { errore = e.getMessage(); }
    
          return connesso;
       }
    
       // Esegue una query di selezione dati sul Database
       // query: una stringa che rappresenta un'istruzione SQL di tipo SELECT da eseguire
       // colonne: il numero di colonne di cui sarà composta la tupla del risultato
       // ritorna un Vector contenente tutte le tuple del risultato
       public Vector eseguiQuery(String query) {
          Vector v = null;
          String [] record;
          int colonne = 0;
          try {
             Statement stmt = db.createStatement();     // Creo lo Statement per l'esecuzione della query
             ResultSet rs = stmt.executeQuery(query);   // Ottengo il ResultSet dell'esecuzione della query
             v = new Vector();
             ResultSetMetaData rsmd = rs.getMetaData();
             colonne = rsmd.getColumnCount();
    
             while(rs.next()) {   // Creo il vettore risultato scorrendo tutto il ResultSet
                record = new String[colonne];
                for (int i=0; i<colonne; i++) record[i] = rs.getString(i+1);
                v.add( (String[]) record.clone() );
             }
    
             rs.close();     // Chiudo il ResultSet
             stmt.close();   // Chiudo lo Statement
          } catch (Exception e) { e.printStackTrace(); errore = e.getMessage(); }
    
          return v;
       }
    
       // Esegue una query di aggiornamento sul Database
       // query: una stringa che rappresenta un'istuzione SQL di tipo UPDATE da eseguire
       // ritorna TRUE se l'esecuzione è adata a buon fine, FALSE se c'è stata un'eccezione
       public boolean eseguiAggiornamento(String query) {
          int numero = 0;
          boolean risultato = false;
          try {
             Statement stmt = db.createStatement();
             numero = stmt.executeUpdate(query);
             risultato = true;
             stmt.close();
          } catch (Exception e) {
             e.printStackTrace();
             errore = e.getMessage();
             risultato = false;
          }
          return risultato;
       }
    
       // Chiude la connessione con il Database
       public void disconnetti() {
          try {
             db.close();
             connesso = false;
          } catch (Exception e) { e.printStackTrace(); }
       }
    
       public boolean isConnesso() { return connesso; }   // Ritorna TRUE se la connessione con il Database è attiva
       public String getErrore() { return errore; }       // Ritorna il messaggio d'errore dell'ultima eccezione sollevata
    }

    il main:
    codice:
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    
    package ircdownload;
    
    
    import java.util.Vector;
    
    /**
     *
     * @author fabio
     */
    public class Main {
    
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) {
    
            String [][] parametri = {{"DRIVER", "Microsoft Access Driver (*.mdb)"},
                             {"DBQ", " /media/dati/autovetture.MDB"}
                            };
    
    Database db = new Database("", parametri);  // Nota: il nome DSN è vuoto!
    
    // Effettuiamo la connessione:
    if ( !db.connetti() ) {
       System.out.println("Errore durante la connessione!");
       System.out.println( db.getErrore() );
       System.exit(0);
    }
    
    // Reperiamo i dati attraverso una query. Nome della tabella: Tbl.
    Vector v = db.eseguiQuery("SELECT * FROM autovetture;");
    
    // Stampiamo i risultati:
    int i=0;
    while ( i<v.size() ) {
       System.out.println("Record numero " + (i+1));
       String [] record = (String[]) v.elementAt(i);
       for (int j=0; j<record.length; j++)
          System.out.println( record[j] );
    }
    
    // Eseguiamo un'aggiornamento sulla tabella Tbl:
    if ( !db.eseguiAggiornamento("UPDATE Tbl SET campo=valore WHERE campo>1;") ) {
       System.out.println("Errore nell'aggiornamento!");
       System.out.println( db.getErrore() );
    }
    
    // Chiudiamo la connessione col database:
    db.disconnetti();
    
        }
    
    }
    ed ecco l'errore
    codice:
    Errore durante la connessione! [unixODBC][Driver Manager]Data source name not found, and no default driver specified COSTRUITO CON SUCCESSO (tempo totale: 0 secondi)
    cosa sbaglio?grazie!

  2. #2
    stai utilizzando i driver ODBC che, evidentemente, non hai configurato.
    Vedi http://www.easysoft.com/developer/in...dbc/linux.html per i dettagli
    ciao
    Ivan Venuti
    Vuoi scaricare alcuni articoli sulla programmazione, pubblicati su riviste di informatica? Visita http://ivenuti.altervista.org/articoli.htm. Se vuoi imparare JavaScript leggi il mio libro: http://www.fag.it/scheda.aspx?ID=21754 !

  3. #3
    devo importare nel progetto i driver jar del ODBC giusto?ok appena posso farò sapere!

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    13
    Ciao a tutti, anche io ho lo stesso problema. Non ho capito però come configurare i driver ODBC.
    Ho un'applicazione che accedere ad un database access. Su windows funziona perfettamente, mentre sotto linux mi genera un'eccezione con questo messaggio:
    codice:
    [unixODBC][Driver Manager]Data source name not found, and no default driver specified
    Mi potete dare qualche dritta?

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Moderazione

    Come espressamente richiesto dal Regolamento interno il codice va postato indentato all'interno degli appositi tag CODE (punto 6 del regolamento linkato).

    Altrimenti è tutta un'accozzaglia illeggibile.


    Sistemo io ove possibile.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Originariamente inviato da fry88
    Ciao a tutti, anche io ho lo stesso problema. Non ho capito però come configurare i driver ODBC.
    Ho un'applicazione che accedere ad un database access. Su windows funziona perfettamente, mentre sotto linux mi genera un'eccezione con questo messaggio:
    [unixODBC][Driver Manager]Data source name not found, and no default driver specified

    Mi potete dare qualche dritta?
    Credo che il link fornito da ivenuti sia utile per sapere come configurare ODBC su Linux.
    ODBC è una tecnologia sviluppata da Microsoft: sotto Windows, ovviamente, è già tutto configurato; sotto Linux no.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    13
    si l'ho visto il link di ivenuti ma non ci ho capito molto... grazie tante cmq dell'aiuto

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.