Visualizzazione dei risultati da 1 a 9 su 9

Discussione: [JAVA]Linux & MySQL

  1. #1

    [JAVA]Linux & MySQL

    Salve a tutti,
    sto iniziando a sviluppare applicazioni Java su piattaforma
    Linux Red Hat Enterprise 5, in quanto utilizzato in ambito lavorativo.
    Ho installato l'occorrente (JDK, Netbeans, MySQL, mysql-connector-java-5.1.6-bin.jar).
    Il mysql-connector-java-5.1.6-bin.jar l'ho messo nella home utente e, da Netbeans, ho aggiunto la libreria.
    Ho fatto una semplice classe per testare la connessione a MySQL.
    Questo il codice:

    codice:
    package prgjdbc;
    
    import java.sql.*;
    
    public class Main {
    
        public static void main(String[] args) {
            Statement stmt = null;
            ResultSet rs = null;
    
            try{
                System.out.println("Carico il driver");
                Class.forName("com.mysql.jdbc.Driver").newInstance();
                Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/?" +
                                                              "user=operatore" + "&" +
                                                              "password=operatore");
    
                System.out.println("Connessione a MySQL server effettuata con successo.");
    
                conn.setCatalog("test");
                stmt = conn.createStatement();
                rs = stmt.executeQuery("SELECT Nome, Valore FROM Tags");
    
                String record = new String();
                while(rs.next()) {
                  record += rs.getString("Nome") + ", " + rs.getString("Valore") + "\n";
                }
                conn.close();
                System.out.println(record);
            }
            catch (Exception ex) {
                System.out.println("SQLException: " + ex.getMessage());
            }
        }
    }
    Se eseguo il codice dall'IDE di Netbeans funziona.

    Se lo eseguo da terminale dalla home utente, ho questo output:
    codice:
    [gigi@miopc ~]$ java -jar "/home/gigi/NetBeansProjects/PrgJDBC/dist/PrgJDBC.jar"
    Carico il driver
    Failed to load Main-Class manifest attribute from PrgJDBC.jar
    [gigi@miopc ~]$
    Se lo eseguo da terminale dalla cartella dist del progetto, ho quest'altro output:
    codice:
    [gigi@miopc dist]$ java -jar "PrgJDBC.jar" 
    Carico il driver
    SQLException: Unexpected exception encountered during query.
    [gigi@miopc dist]$
    questo e' il file MANIFEST.MF
    codice:
    Manifest-Version: 1.0
    Ant-Version: Apache Ant 1.7.1
    Created-By: 11.2-b01 (Sun Microsystems Inc.)
    Main-Class: prgjdbc.Main
    Class-Path: lib/mysql-connector-java-5.1.6-bin.jar
    X-COMMENT: Main-Class will be added automatically by build
    Cosa sbaglio? Ho dimenticato di impostare qualcosa?

    Grazie, Gianpaolo

  2. #2

    Io faccio in questo modo

    Ho realizzato un programmino di gestione con interfaccia grafica in Java, utilizzo anche io come DB MySql e funge tutto alla perfezione.

    Allora innanzitutto ti crei una classe che, come puoi vedere, ho chiamato ConnectionManager, questa classe sarà responsabile ogni volta di stabilire la connessione col DB MySql.

    codice:
    import java.sql.*;
    import programmatunisia.UtilityClasses.MyException;
    
    public class ConnectionManager {
        
        private ConnectionManager() {};
        
        private static Connection conn = null;
        private static final String DRIVER = "com.mysql.jdbc.Driver";
        private static String URL = "jdbc:mysql://localhost/nome_database";
        private static final String LOGIN = "utente_database";
        private static final String PASSWORD = "pass_utente_database";
    
        public static Connection getConnection() throws SQLException, MyException {
            try {
                if (conn == null) {
                    Class.forName(DRIVER);
                    conn = DriverManager.getConnection(URL, LOGIN, PASSWORD);
                }else{
                    if (conn.isClosed()) {
                        conn = DriverManager.getConnection(URL, LOGIN, PASSWORD);
                    }else{
                        conn.rollback();
                    }
                }
                return conn;
            } catch (ClassNotFoundException e) {
                throw new MyException("Errore: " + e.getMessage());
            }
        }
        
        //Questo metodo l'ho aggiunto per permettere all'utente di scegliere l'indirizzo del Server
        //dove risiede il DB qualora questo non fosse localhost ma su postazione remota.
    
        public static void setIndirizzo(String temp) {
            URL = "jdbc:mysql://" + temp + "/gestione_camiceria";
        }
    }
    Poi crei un'istanza di questa classe ogni volta che dovrai stabilire una connessione con il DB per fare qualche operazione su di esso, ti posto l'esempio di un metodo di INSERIMENTO.

    codice:
    import java.sql.*;
    import programmatunisia.DataAccessClasses.ConnectionManager;
    import programmatunisia.DomainClasses.Persona;
    import programmatunisia.UtilityClasses.MyException;
    
    public class PersonaDAO{
    
        private PersonaDAO() {
        }
        private static final String INSERT = "INSERT INTO persona(nome, cognome, eta) VALUES (?, ?, ?)";
     
    
        public static void insert(Persona p) throws MyException {
            Connection conn = null;
            PreparedStatement pstmt = null;
            try {
                conn = ConnectionManager.getConnection();
                pstmt = conn.prepareStatement(INSERT);
                pstmt.setString(1, p.getNome());
                pstmt.setString(2, p.getCognome());
                pstmt.setInt(3, p.getEta());
                pstmt.executeUpdate();
                pstmt.close();
                conn.close();
            } catch (SQLException ex) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    throw new MyException("Errore: " + ex.getMessage());
                }
                throw new MyException("Errore: " + ex.getMessage());
            }
        }
    }
    Come puoi vedere creo un oggetto Connection conn = null, lo inizializzo come istanza di ConnectionManager, faccio quello che devo fare, chiudo la connessione con conn.close;


    Lavorando con NetBeans includo sul progetto la libreria fornita da MySql che mi funzionerà da driver (il file connectorjdbc.jar).

    Quindi compilo tutto su NetBeans e genero il dist.

    Nota che quando generi il Jar con NetBeans, viene creata una cartella dist con dentro il Jar del tuo progetto e con una cartella lib contenente le librerie che hai usato nel progetto.

    Nel caso in cui lanci il progetto da NetBeans con Run, funzionerà tutto, se vai sul prompt e vai nel percorso del Jar eseguibile e lo lancerai con java -jar NOMEPROGETTO.jar funzionerà allo stesso modo (perchè trova sempre la cartella lib li dove è posizionato il jar).

    Qualora tu copi e incolli il jar in un'altra posizione, noterai che sia cliccandoci sopra, sia dal prompt, avrai problemi perchè il tuo jar non riesce a reperire più la cartella lib con dentro le librerie (nel tuo caso il connector jdbc).
    Quindi ti raccomando di copiare nella stessa cartella dovrei avrai copiato in precedenza il jar la cartella lib con il connector dentro e vedrai che tornerà a funzionare.

    QUINDI IN DEFINITIVA FAI BENE ATTENZIONE CHE IL TUO FILE ESEGUIBILE .jar SI TROVI IN UNA CARTELLA CHE CONTIENE ALL'INTERNO ANCHE LA CARTELLA lib CON DENTRO IL CONNECTOR.

  3. #3
    Grazie fabiolinux85 per la tua risposta molto chiara.
    Il codice che ho postato (a parte qualche piccolo ritocco) si trova in un file all'interno
    del mysql-connector-java-5.1.6-bin.jar come esempio di connessione.
    QUINDI IN DEFINITIVA FAI BENE ATTENZIONE CHE IL TUO FILE ESEGUIBILE .jar SI TROVI IN UNA CARTELLA CHE CONTIENE ALL'INTERNO ANCHE LA CARTELLA lib CON DENTRO IL CONNECTOR.
    Infatti, da terminale mi posiziono nella cartella dist del progetto, la quale contiene una cartella lib
    con all'interno il file mysql-connector-java-5.1.6-bin.jar ma l'output che mi restituisce è questo errore:
    codice:
    [gigi@miopc dist]$ java -jar "PrgJDBC.jar" 
    Carico il driver
    SQLException: Unexpected exception encountered during query.
    Proverò a fare qualche altro tentativo con le tue classi. Deve esserci qualcosa che mi sfugge :master:
    Terrò a mente la tua citazione e ti farò sapere.
    Grazie ancora

  4. #4

    E' molto strano, tuttavia ti posto una situazione simile capitata qualche tempo fa

    Questa situazione mi si è verificata con Eclipse su Linux Ubuntu, anche se in realtà sono molto più maniaco di NetBeans.

    Ho risolto così:
    - disinstallato eclipse da aggiungi-rimuovi programmi (nel tuo caso prova a rimuovere NetBeans)
    - eliminato tutti i pacchetti di libgcj (IMPORTANTE) <-------------------
    ....>Devi andare sul gestore dei pacchetti e con cautela selezionare tutti quelli che hanno a che fare con GCJ: The GNU Compiler for the JavaTM Programming Language<......
    (Io l'ho fatto molto tempo fa, ma mi pare siano 5 o 6 pacchetti. E non è difficile trovarli.)

    Poi ho proceduto all'installazione della jdk della sun abilitando il repository universe, (o semplicemente scaricando il binario dal sito della sun, magari quello con NetBeans )

    Reinstallato Eclipse, è partito correttamente;

    SE FOSSE COMPARSO UN MESSAGGIO DI ERRORE DEL TIPO:"STAI USANDO LIBGCJ, SEI PREGATO DI USARE LA ROBA SUN SIGNIFICA CHE NON HAI RIMOSSO TUTTI I PACCHETTI DELLA VERSIONE GNU DELLA JVM".

    Nb: Ho fatto questa cosa con la versione 8.04 di ubuntu. Non credo che le cose differiscano di molto con la versione 8.10 (o con le altre distro) qualora si abbia installati quei maledetti pacchetti libgcj.


    IN DEFINITIVA: il problema che hai tu sorge perchè stai semplicemente utilizzando una JVM che non è quella di Sun Microsystems (ovvero, stai utilizzando una JVM non ufficiale contenuta nei libgcj).

  5. #5

    AH, ULTIMA CONSIDERAZIONE

    Questo spiegherebbe una cosa che mi pare di aver letto:
    hai detto che se lo lanci dal IDE NetBeans il tuo programma funge correttamente, mentre dall'esterno, Console o cliccando sul JAR, hai problemi.....beh molto probabilmente NetBeans sta usando la JVM ufficiale Sun mentre il comando java dato da Console va a avviare la JVM non ufficiale che hai anche installata sul tuo sistema linux, quei famosi pacchetti libgcj.

  6. #6
    Oggi al lavoro non ho potuto verificare le classi che mi hai postato in quanto ho dovuto
    mettere in piedi due server Linux Red Hat EL5 con MySQL, uno di replica all'altro;
    non tanto per il tempo di installazione che in un'oretta erano belli e pronti, quanto per il loro
    trasporto fisico
    Il pc Red Hat che uso non ha collegamento internet, per cui ho dovuto installare a mano
    ogni programma a cominciare dal JDK (jdk-6u12-linux-i586-rpm.bin), Netbeans (netbeans-6.5-ml-javase-linux.sh)
    che in fase di installazione mi ha chiesto quale jdk usare (quella di Red Hat è la 1.4) ed il connector.
    L'installazione è andata liscia senza intoppi o errori.
    Comunque verificherò anche ciò che mi hai detto che Netbeans usi la jre giusta e non le GCJ.
    Questo lo potrò fare domattina al lavoro ma nel frattempo mi creo l'ambiente sul pc
    ubuntu di casa e vediamo se ho gli stessi problemi. Sono fiducioso
    Ti ringrazio nuovamente per la tua disponibilità

  7. #7
    Utente di HTML.it L'avatar di Brainjar
    Registrato dal
    Nov 2004
    Messaggi
    1,162
    Ciao,
    guardando il tuo codice risulta che esegui solo la stampa a video della
    codice:
                System.out.println("Carico il driver");
    Mentre non arrivi a stampare

    codice:
                System.out.println("Connessione a MySQL server effettuata con successo.");
    Per cui l'errore, come giustamente segnalato dal compilatore, sta in :
    codice:
                Class.forName("com.mysql.jdbc.Driver").newInstance();
                Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/?" +
                                                              "user=operatore" + "&" +
                                                              "password=operatore");
                // Errore !!
    Devi scrivere :
    codice:
               Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306",
                                                              "operatore", "operatore");
               // Suggerimento di Fabiolinux85 
               // DriverManager.getConnection(URL, LOGIN, PASSWORD);
    Ciao, Brainjar

  8. #8
    Caro fabiolinux85, avevi proprio ragione!
    Ho disinstallato il pacchetto
    java-1.4.2-gcj-compat-1.4.2.0-40jpp.115.i386
    e lanciando nuovamente il progetto è successo questo
    codice:
    [gigi@miopc dist]$ java -jar "PrgJDBC.jar" 
    bash: /usr/bin/java: No such file or directory
    Ho capito che usava java 1.4 di sistema, nonostante con Netbeans continuava a funzionare.
    Quindi ho puntato a java 1.6 installato da me e usato da Netbeans e, sorpresa
    codice:
    [gigi@miopc dist]$ /usr/java/jdk1.6.0_12/bin/java -jar PrgJDBC.jar 
    Carico il driver
    Connessione a MySQL server effettuata con successo.
    Chissà perchè non funzionava con la 1.4 :master:
    Ho aggiunto il percorso alla variabile ambiente per lanciare il comando java senza inserire ogni volta
    tutto il percorso ed è tutto ok.
    Ora controllerò che non accada la stessa cosa con Ubuntu a casa.
    Sei stato grande!

    Grazie per il prezioso aiuto

  9. #9

    Sono contento per te

    Eh figurati, è stato un aiutino, sinceramente li per li non mi ero ricordato di questa cosa ma poi ripensandoci bene ho rammentato che era capitato anche a me circa 1 annetto fa una cosa simile mentre realizzavo un progetto per la mia facoltà (Ingegneria Informatica alla Sapienza di Roma).

    Comunque meglio così...ciao!!!

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.