Newsgroup: it.comp.java
Titolo: Connessione a MySQL

Salve a tutti,
io uso eclipse 3.0.2 e ho 2 classi Main e Anagrafica in un progetto.
In Main instanzio Anagrafica.
In Anagrafica c'è la riga:
Class.forName("com.mysql.jdbc.Driver").newInstance();
che è l'inzio della connessione al db.
Che già me la segna in rosso...Perchè?
Poi comunque quando eseguo il tutto, mi dà questi errori:
Exception in thread "main" java.lang.Error: Unresolved compilation
problems:
	Unhandled exception type IllegalAccessException
	Unhandled exception type InstantiationException
	Unhandled exception type ClassNotFoundException
	at Anagrafica.<init>(Anagrafica.java:42)
	at Main.main(Main.java:18)
Come posso fare per risolvere questo problema???...Grazie...MArco

 Come posso fare per risolvere questo problema???...Grazie...MArco
Devi gestire quelle eccezioni, cosa che non dovrebbe sorprenderti più di 
tanto scrivendo un programma java.
Inoltre, siccome lavori con eclipse che compila in tempo reale, potresti 
anche considerarli i messaggi di errore e i crocioni rossi... oltretutto 
eclipse ti da anche i suggerimenti su come risolverli.

 eclipse ti da anche i suggerimenti su come risolverli.
I messaggi sono quelli che ho scritto, ma non riesco a risolverlo.

 I messaggi sono quelli che ho scritto, ma non riesco a risolverlo.
Devi gestire le eccezioni, l'ho detto. Vedi try/catch.
Se non ti è chiaro, cerca "Thinking in Java" su google, scaricalo e 
leggi il capitolo relativo alle eccezioni.

Scusami ma sono cosa sono le eccezzioni, ho lavorato in C#.
Anche se le gestisco lo stesso non riesco a collegarmi a Mysql.
Così non risolvo il mio problema.

Cosě non risolvo il mio problema.
   Partiamo dalle basi: il codice compila? O forse quando lavoravi in C#
riuscivi a collegarti ai DB anche con codice che non compilava?
   Una volta che il codice compila e se continua a non funzionare puoi
magari postare il codice stesso e il log. Nessuno ha la sfera di cristallo
qui dentro.
   Augh :)
F

 riuscivi a collegarti ai DB anche con codice che non compilava?
Ecco, forse mi sono espresso male e proprio questo che volevo dire.
Il codice non mi compila, quindi anche se gestisco l'eccezzione che
cosa mi cambia..niente.
Perchè mi và in errore e non riesco a fare niente....


Davvero, segui il consiglio di VV: leggiti il capitolo sulle eccezioni di
Thinking in Java. Poi non appena hai il codice che compila se ne parla.
Ti ripeto, non c'e' la sfera di cristallo qui. Se ci dici "il codice non mi
compila" noi non sappiamo ne' il percome ne' il perche'...  stai chiedendo
una soluzione a un problema che non ci hai posto e che oltretutto e' di una
banalità mostruosa e che potresti risolvere da solo se tu avessi la
gentilezza di acquisire anche una benche' minima competenza sul linguaggio.
C# a parte, naturalmente :-)
-- 
---
Francesco Galli / Cinghiale Mannaro
Personal: 
http://cinghialemannaro.splinder.com
TMS project: 
http://tms.inera.it

 cosa mi cambia..niente.
Ti allego un esempio funzionante, prova a scopiazzare un po'
import java.sql.*;
class ProvaDB
{
 public static void main(String[] args)
 {
  int ctr = 0;
  try
  {
   Class.forName("com.mysql.jdbc.Driver");
   Connection c1 = 
DriverManager.getConnection("jdbc:mysql://localhost/miodatabase", "userid", 
"password");
   Statement s1 = c1.createStatement();
   ResultSet r1 = s1.executeQuery("select * from miatabella ");
   while(r1.next())
   {
    ctr ++;
   }
   r1.close(); s1.close(); c1.close ();
  }
  catch (Exception e)
  {
   System.out.println("ERRORE : " + e);
   e.printStackTrace(System.out);
  }
  System.out.println("Num.Righe: " + ctr);
 }
}

 cosa mi cambia..niente.
Se č vero che quello č l'errore di compilazione, cambia che dopo non ce 
l'hai piů. Se hai altri errori non so che farci. Non so se l'hai notato, 
ma non siamo dietro le tue spalle a guardare il tuo monitor; quello che 
non racconti non lo sappiamo.

> Ti allego un esempio funzionante, prova a scopiazzare un po'
   E tu definisci quest'esempio FUNZIONANTE?!?
   Magari funzioan pure, ma e' scritto veramente da schifo. Una vergogna, mi
da' l'orticaria quasi a vederlo :) roba che veramente getta un alone di onta
sul programmatore che l'ha scritto...

Funziona, Grazie.

Ti dovresti dare una calmata.
Ti vedo un pò agitato.

 Ti vedo un pò agitato.
Ho solo in uggia persone incompetenti, domande poco intelligenti e
risposte inopportune. E anche la filosofia del pesce oggi invece che
dell'imparare a pescare domani.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

Semplice curiosità, ma cosa cambieresti ?
Io avrei utilizzato un PreparedStatement e avrei tolto quel ciclo che è 
inutile per conoscere il numero di record ma (sarà inesperienza da parte 
mia) non lo vedo così drammatico quel pezzo di codice.
Non vorrei sembrare presuntuoso, ma vorrei solo sapere cosa avresti 
migliorato perchè anch'io avrei scritto un programma di prova più o meno 
uguale (a parte quelle due modifiche di cui sopra).
ciao,
gm
Francesco Galli ha scritto:


 ha scritto nel 
messaggio news:42ce4...@x-privat.org...

Si funzionante,
magari non funzionale, ma funzionante si,
ed eccellente dal punto di vista didattico.

 ed eccellente dal punto di vista didattico.
Funzioannte si, funzionale mi manca la definizione, eccellente dal punto di
vista didattico assolutamente no, anzi. Diseducativo. Rispondo anche a
gmauri che mi aveva chiesto come lo cambierei.
Statement s1 = c1.createStatement();
   ResultSet r1 = s1.executeQuery("select * from miatabella ");
Immagina che la riga in cui esegui lo statement tiri su una eccezione SQL.
Cosa succede?

Francesco Galli ha scritto:




ma nn sono uguali a quelle di prima? cosa è cambiato?cosa succede se si
verifica un eccezione, nn viene presa dal catch finale?
scusate, è che credevo di aver capito il meccanismo delle eccezioni ma ora
sono un po confuso!


 sono un po confuso!
   Se l'hai capito, allora sai che una eccezione comporta l'interruzione del
flusso, il salto al primo statement del blocco "catch" e... e...
  ...e la connessione quando cacchiaccio la rilasci? :-) Ecco il problema di
quel codice. Leaking della connessione, o addirittura dello statement se
l'errore avviene all'interno del ciclo di lettura del resultset :)
   La soluzione dle problema e' lasciata come esercizio allo studente :)

Francesco Galli ha scritto:






ma la connessione non viene chiusa al termine del main? sarebbe meglio
esplicitare la chiusura...
leaking dello statement che significa?
quando il main termina non si perde l'ambiente di runtime
dell'applicazione?
ho capito il discorso delle eccezioni ma non tanto questo.
scusate ancora per i dubbi.


 scusate ancora per i dubbi.
   Se quel codice li' e' all'intenro di un main singolo per cui nasce e
muore il problema si riduce ma non scompare, perche' comunque il database
non ha notifica della chiusura della connessione e quindi tiene la
connessione aperta fino ad avvenuto timeout. Se sei ad esempio all'interno
di una servlet, dove non c'e' terminazione del runtime, il problema e'
ancora peggiore. Metti quel codice in un applicativo di produzione, magari
web o anche client-server, e vedrai misteriosamente esplodere il tutto dopo
un tempo variabile di utilizzo :)
F