# [Risolto]JDBC e MySql

## vaporino

Ciao ragazzi........

volevo fare un piccolo database usando java e mysql.........

ho seguito un po di guide e ho cercato per prima cosa di connetermi con mysql usando il connettore jdbc della sun.

Qui di seguito vi riporto il codice della mia applicazione:

```

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

// Notice, do not import com.mysql.jdbc.*

// or you will have problems!

public class LoadDriver {

    public static void main(String[] args) {

     

            // The newInstance() call is a work around for some

            // broken Java implementations

try {

            Class.forName("com.mysql.jdbc.Driver").newInstance();

}catch (Exception ex)

{

   

}

try {

               Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/db?user=root&password=********");

        } catch (SQLException ex){

           System.out.println("SQLException: " + ex.getMessage());

            System.out.println("SQLState: " + ex.getSQLState());

            System.out.println("VendorError: " + ex.getErrorCode());

            // handle the error

        }

}

}

```

Ma non capisco perchè ottengo

```

SQLException: No suitable driver

SQLState: 08001

VendorError: 0

```

Cosa significa ??? e come faccio vedere se mi sono connesso a mysql??Last edited by vaporino on Mon Sep 18, 2006 3:26 pm; edited 2 times in total

----------

## makoomba

Moved from Forum italiano (Italian) to Forum di discussione italiano.

----------

## fbcyborg

Hai installato il JDBC Connector???

Prova a fare:

```
emerge dev-java/jdbc-mysql
```

----------

## vaporino

Ho scaricato il connettore jdbc direttamente dal sito della sun...........e ho sistemato il tutto come da guida

cmq penso che il problema non sia questo dato che le varie classi che riguardano la connessione con mysql eclipse le vede........o non so forse mi sbaglio!!

----------

## vaporino

Altrimenti come posso vedere se il connetore jdbc è installato correttamente??

----------

## fbcyborg

guarda, penso che facendo come ti ho detto l'installazione (a meno di errori di compilazione) avvenga correttamente.

Comunque tu fai una prova.. la mia è solo un ipotesi.  :Rolling Eyes: 

----------

## vaporino

Ho provato come mi hai suggerito........

ma ottengo gli stessi errori!!!

Non capisco se un problema del connettore jdbc o di mysql!!!

Ma tu come hai fatto ad interfacciarti con mysql.......hai semplicemente emerso il connetore come mi hai detto.......!!!

In fase di compilazione non mi da nessuno errore........

Hai qualche altra idea

----------

## fbcyborg

sarò sincero.. quì su linux non c'ho mai provato.. ti ripeto la mia voleva essere solo un'ipotesi.. purtroppo sbagliata. chiedo venia.

----------

## fikiz

 *vaporino wrote:*   

> Non capisco se un problema del connettore jdbc o di mysql!!!

 

beh, intanto puoi provare ad escludere eventuali problemi sul lato MySQL. il server e' su? accetta connessioni da locale e ed eventualmente anche via rete? 

comunque dal messaggio di errore "no suitable driver" mi verrebbe da dire che devi indagare sul lato java.

conosco MySQL ma purtroppo non jdbc. mi spiace non avere molto di piu' da dire... sorry

----------

## vaporino

Ma secondo te è un problema del connettore...........

non so va settato qualcosa???

----------

## conqueror86

 *vaporino wrote:*   

> Ho scaricato il connettore jdbc direttamente dal sito della sun...........e ho sistemato il tutto come da guida
> 
> cmq penso che il problema non sia questo dato che le varie classi che riguardano la connessione con mysql eclipse le vede........o non so forse mi sbaglio!!

 

se usi eclipse quello sembra l'errore tipico di quando non si importa il jar nel progetto. Hai importato il file mysqlconnector (mettilo nella stessa cartella del progetto magari) selezionandolo da

Project (menù in alto) -> Properties-> Java Build Path (menù a sinistra) -> Libraries -> Add external Jars

e cmq io per connettermi al database non metto il .newistance nella definizione del Class.forName e poi per fare la connessione uso 

			Connection mySQLConn = DriverManager.getConnection(mySQLURL, "user", "pass");

Ciao ciao

----------

## vaporino

conqueror86 mi potresti allora dire esattamente come fai a conneterti con mysq sfruttando jdbc???

Scrivendomi anche il codice che usii su eclipse........ecc...

Insomma un po tuti i passi.........

Al limite mi potresti consigliare qualche guida.........che hai usato tu!!!

Su Mysql riesco a connetermi senza problemi.......

Ti ringrazio anticipatamente

----------

## conqueror86

Allora prima di tutto devi importare nel progetto il driver per mysql (come ti ho scritto prima) sennò non vede le classe del jar. Poi ti faccio un esempio di connessione e di una query su un database già creato (solo dal punto di vista strutturale).

Questa è la classe che si occupa del database (mysql su linux) di un mio progetto universitario. Il database l'ho creato io dalla shell di mysql (è facile ci sono milioni di guide su mysql in rete). poi gli inserimenti e la lettura (le varie query) le faccio tramite il programma Java.

```

import it.autonol.agenzia.FinestraRisultato;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

import java.sql.ResultSet;

import java.sql.Statement;

import javax.swing.JOptionPane;

import javax.swing.JTextArea;

public class DBAutomobile {

   

   private String query, tipologia, targ;

   private JTextArea risultato = new JTextArea();

   private boolean control_targa=false;

   private ResultSet r;

   

   public DBAutomobile(String q, String tip, String tar) {

      query = q;

      tipologia = tip;

      targ = tar;

      

      try {

         Class.forName("com.mysql.jdbc.Driver");

      

         //Definizione dell'URL

         String nomeDB = "autonol";

         String host = "localhost:3306";

         String mySQLURL = "jdbc:mysql://"+ host + "/"+nomeDB;

      

         //Costruzione della connessione

         Connection mySQLConn = DriverManager.getConnection(mySQLURL, "nomeutente", "password");

         Statement MySql = mySQLConn.createStatement();

         if (tipologia.equals("operatore")) {

            String query2 = "SELECT * FROM automobile WHERE targa='"+targ+"'";

            r = MySql.executeQuery(query2);

            while (r.next()) {

               if (r.getString("targa").equals(targ)) {

                  JOptionPane.showMessageDialog(null, "Targa Gia' Presente", "Inserimento non riusciuto", JOptionPane.ERROR_MESSAGE);

                  control_targa=true;

               }

            }

            if (control_targa==false) {

               MySql.executeUpdate(query);

               JOptionPane.showMessageDialog(null, "Inserimento effettuato con successo");

            }

         }

         else if (tipologia.equals("agenzia")) {

            ResultSet result = MySql.executeQuery(query);

            while (result.next()) {

               String ris = "Marca: " +result.getString("marca") + "\nModello: " +result.getString("modello") + "\nTarga: " +result.getString("targa") + "\nAnno Immatricolazione: " + result.getString("anno_immatricolazione") + "\nCosto Giornaliero: " + result.getString("costo_giornaliero") +"\n\n"; 

               risultato.append(ris);

            }

            FinestraRisultato f = new FinestraRisultato(risultato);

         }

      

      }

   

      catch(ClassNotFoundException cnfe) {

         System.err.println("Errore nel caricamento del driver: "+cnfe);

      }

   

      catch(SQLException sqle) {

         System.err.println("Errore di connessione: "+sqle);

      }

   }

   

   public ResultSet getResult() {

      return r;

   }

}

```

----------

## vaporino

Il mio problema è che non mi trova la classe con Classe.Forname(....Driver), eppure il connetore jar l'ho inserito nel progetto......tanto è vero che la classe Driver che cerco c'è aprendo la libreria del connetore!!!

Che posso fare ??

----------

## x-dd

Non so quanto possa esserti utile ma tempo fa ho installato un serverino Gentoo per dei colleghi che dovevano scrivere un programma in java, mi ricordo che la connessione a mysql funzionò solo dopo aver messo quel file in:

/opt/<directory sun-jdk>/jre/lib/ext/

----------

## randomaze

 *vaporino wrote:*   

> Il mio problema è che non mi trova la classe con Classe.Forname(....Driver), eppure il connetore jar l'ho inserito nel progetto......tanto è vero che la classe Driver che cerco c'è aprendo la libreria del connetore!!!

 

Inserirlo nel progetto non sempre equivale a inserirlo nel classpath con cui viene lanciata l'applicazione.

----------

## vaporino

Ho provato x-dd a mettere il connettore in /opt/<directory sun-jdk>/jre/lib/ext/ma niente da fare......

Forse hai ragione tu randomaze.......ma come si fa ad inserirlo nel classpath?? Ma esattamente cos'è e a cosa serve il classpath......ho una vaga idea......mi potresti consigliare anche qualche guida a riguardo??

----------

## randomaze

 *vaporino wrote:*   

> Ma esattamente cos'è e a cosa serve il classpath......ho una vaga idea......mi potresti consigliare anche qualche guida a riguardo??

 

 :Shocked: 

vaporino,

qualche post fa non riuscivi a leggere un eccezione; ora non sai cos'é il classpath (e dire che il nome mi sembra abbastanza esplicativo). In entrambi i casi si tratta di nozioni basilari, per usare java (non per usarlo al meglio, ma per usarlo e basta).

In tutta sinceritá, se si vuole imparare java forse é meglio apprendere le basi da un buon libro piuttosto che da post saltuari su un forum (che, peraltro, non tratta di programmazione java e/o OO ma di una distribuzione linux).

----------

## vaporino

Ok randomaze hai ragione.......mi sono aggiornato a riguardo!! Ora riesco a caricare il driver jdbc.......ma penso di avere un altro problema ora!! Non capisco per quale cavolo di motivo non si riesce a connettere!!

Vi mostro il codice dell'aqpplicazione:

```

import java.sql.*;

public class db {

   public static void main(String args[])

   {

   try {   System.out.println("Helloooooooooooo");

           Class.forName("com.mysql.jdbc.Driver"); 

            

        Connection con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/db?user=root&password=vaporino82");

         Statement cmd=con.createStatement();

         String qry="select * from prova";

         ResultSet res=cmd.executeQuery(qry);

         while (res.next())

         {

            System.out.println(res.getString("nome"));

         }

         res.close();

         cmd.close();

         con.close();

        } catch (ClassNotFoundException e){ e.printStackTrace();

           

        }catch (SQLException e) {

           e.printStackTrace();

        }

     

      

   

   }

   

}

```

Dopo un po di tempo ottengo i sewguenti errori

```

com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception: 

** BEGIN NESTED EXCEPTION ** 

java.net.SocketException

MESSAGE: java.net.ConnectException: Connection timed out

STACKTRACE:

java.net.SocketException: java.net.ConnectException: Connection timed out

   at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:156)

   at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:284)

   at com.mysql.jdbc.Connection.createNewIO(Connection.java:2565)

   at com.mysql.jdbc.Connection.<init>(Connection.java:1485)

   at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266)

   at java.sql.DriverManager.getConnection(DriverManager.java:525)

   at java.sql.DriverManager.getConnection(DriverManager.java:193)

   at db.main(db.java:8)

** END NESTED EXCEPTION **

Last packet sent to the server was 24 ms ago.

   at com.mysql.jdbc.Connection.createNewIO(Connection.java:2631)

   at com.mysql.jdbc.Connection.<init>(Connection.java:1485)

   at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266)

   at java.sql.DriverManager.getConnection(DriverManager.java:525)

   at java.sql.DriverManager.getConnection(DriverManager.java:193)

   at db.main(db.java:8)

```

Non capisco perchè.......eppure riesco a collegarmi con mysql da console!!  :Crying or Very sad: 

Se qualcuni ha un po di pazienza e può dirmi dove sbaglio.....

----------

## x-dd

posta il contenuto del file: /etc/mysql/my.cnf

----------

## vaporino

Ecco qua

```

# /etc/mysql/my.cnf: The global mysql configuration file.

# $Header: /var/cvsroot/gentoo-x86/dev-db/mysql/files/my.cnf-4.1,v 1.3 2006/05/05 19:51:40 chtekk Exp $

# The following options will be passed to all MySQL clients

[client]

#password               = your_password

port                  = 3306

socket                  = /var/run/mysqld/mysqld.sock

[mysql]

character-sets-dir=/usr/share/mysql/charsets

default-character-set=utf8

[mysqladmin]

character-sets-dir=/usr/share/mysql/charsets

default-character-set=utf8

[mysqlcheck]

character-sets-dir=/usr/share/mysql/charsets

default-character-set=utf8

[mysqldump]

character-sets-dir=/usr/share/mysql/charsets

default-character-set=utf8

[mysqlimport]

character-sets-dir=/usr/share/mysql/charsets

default-character-set=utf8

[mysqlshow]

character-sets-dir=/usr/share/mysql/charsets

default-character-set=utf8

[myisamchk]

character-sets-dir=/usr/share/mysql/charsets

[myisampack]

character-sets-dir=/usr/share/mysql/charsets

# use [safe_mysqld] with mysql-3

[mysqld_safe]

err-log                  = /var/log/mysql/mysql.err

# add a section [mysqld-4.1] or [mysqld-5.0] for specific configurations

[mysqld]

character-set-server      = utf8

default-character-set      = utf8

user                   = mysql

port                   = 3306

socket                   = /var/run/mysqld/mysqld.sock

pid-file                = /var/run/mysqld/mysqld.pid

log-error                = /var/log/mysql/mysqld.err

basedir                = /usr

datadir                = /var/lib/mysql

skip-locking

key_buffer                = 16M

max_allowed_packet          = 1M

table_cache             = 64

sort_buffer_size          = 512K

net_buffer_length          = 8K

read_buffer_size          = 256K

read_rnd_buffer_size       = 512K

myisam_sort_buffer_size    = 8M

language                = /usr/share/mysql/english

# security:

# using "localhost" in connects uses sockets by default

# skip-networking

bind-address            = 127.0.0.1

log-bin

server-id                = 1

# point the following paths to different dedicated disks

tmpdir                   = /tmp/

#log-update             = /path-to-dedicated-directory/hostname

# you need the debug USE flag enabled to use the following directives,

# if needed, uncomment them, start the server and issue 

# #tail -f /tmp/mysqld.sql /tmp/mysqld.trace

# this will show you *exactly* what's happening in your server ;)

#log                  = /tmp/mysqld.sql

#gdb

#debug                  = d:t:i:o,/tmp/mysqld.trace

#one-thread

# uncomment the following directives if you are using BDB tables

#bdb_cache_size            = 4M

#bdb_max_lock            = 10000

# the following is the InnoDB configuration

# if you wish to disable innodb instead

# uncomment just the next line

#skip-innodb

#

# the rest of the innodb config follows:

# don't eat too much memory, we're trying to be safe on 64Mb boxes

# you might want to bump this up a bit on boxes with more RAM

innodb_buffer_pool_size = 16M

# this is the default, increase it if you have lots of tables

innodb_additional_mem_pool_size = 2M

#

# i'd like to use /var/lib/mysql/innodb, but that is seen as a database :-(

# and upstream wants things to be under /var/lib/mysql/, so that's the route

# we have to take for the moment

#innodb_data_home_dir      = /var/lib/mysql/

#innodb_log_arch_dir      = /var/lib/mysql/

#innodb_log_group_home_dir   = /var/lib/mysql/

# you may wish to change this size to be more suitable for your system

# the max is there to avoid run-away growth on your machine

innodb_data_file_path = ibdata1:10M:autoextend:max:128M

# we keep this at around 25% of of innodb_buffer_pool_size

# sensible values range from 1MB to (1/innodb_log_files_in_group*innodb_buffer_pool_size)

innodb_log_file_size = 5M

# this is the default, increase it if you have very large transactions going on

innodb_log_buffer_size = 8M

# this is the default and won't hurt you

# you shouldn't need to tweak it

set-variable = innodb_log_files_in_group=2

# see the innodb config docs, the other options are not always safe

innodb_flush_log_at_trx_commit = 1

innodb_lock_wait_timeout = 50

[mysqldump]

quick

max_allowed_packet          = 16M

[mysql]

# uncomment the next directive if you are not familiar with SQL

#safe-updates

[isamchk]

key_buffer                = 20M

sort_buffer_size          = 20M

read_buffer             = 2M

write_buffer             = 2M

[myisamchk]

key_buffer                = 20M

sort_buffer_size          = 20M

read_buffer             = 2M

write_buffer             = 2M

[mysqlhotcopy]

interactive-timeout

```

----------

## vaporino

X-dd sto cercando qualcosa su google.....ma non trovo niente che possa aiutarmi!

Penso che non riguarda il caricamento del connetore.....o sbaglio??

----------

## vaporino

Ragazzi ho provato a pingare il mio stesso pc.......e non riusciva a pingare  !! Per fora non potevo collegarmi con mysql......  :Rolling Eyes: 

Allora ho capito subito che il problema era iptables........l'ho stoppato ed ecco che è finalmente tutto risolto!!  :Laughing: 

Ragazzi vi ringrazio per la vostra pazienza.......alla prossima  :Wink: 

----------

## Cazzantonio

se hai risolto metti almeno il tag risolto...

hai intenzione di applicare almeno solo una delle regole guida?

----------

