Newsgroup: it.comp.java
Titolo: problema con if annidati...aiuto

Mi scuso in anticipo per la lunghezza del messaggio...
Ho un piccolo problemino:
ho apportato delle modifiche al codice sottostante (una mia applicazione)
inserendo la verifica della presenza all'interno del mio DB di un "doppione"
(verifico che nel DB già ci sia la matricola inserita per l'esame a cui ci
si vuole iscrivere)
ma non riesco a farlo funzionare e non trovo l'errore... potreste aiutarmi!
[NOTA]
Il caricamento del driver per la connessione al DB la attivo al lancio
dell'applicazione evitando di caricarlo ogni volta. Ho verificato il buon
funzionamento dell'applicazion prima di inserire le modifiche per la
verifica!
grazie per l'aiuto
[code]
import javax.swing.JOptionPane;
import java.sql.SQLException;
import java.lang.String;
import java.sql.*;
public class GestioneDB extends SQLException {
  public GestioneDB(String action, String esame, int matricola,
                            String cognome, String nome) {
String error = null;
String URL = "jdbc:odbc:Tesina_LPW";
String comandoSQL = null;
String comandoVerifica = "SELECT * FROM Lista WHERE matricola ="
    + matricola + " AND esame = '"+ esame + "'";
if(action == "ISCRIZIONE"){
       comandoSQL = "INSERT INTO Lista(matricola,cognome,nome,esame)"
      + " VALUES( " + matricola + ", '" + cognome + "', '" +
         nome + "', '" + esame + "')" ;}
if(action == "CLEAR"){
       comandoSQL = "DELETE FROM Lista WHERE matricola = " +
      matricola + " AND esame = '" + esame + "'";}
if(action == "VIEW"){
       comandoSQL = "SELECT FROM Lista WHERE esame = '" + esame + "'";}
     Statement st,stVerifica;
     try{
      Connection con = DriverManager.getConnection(URL);
      st = con.createStatement();
      stVerifica = con.createStatement();
      ResultSet verifica = stVerifica.executeQuery(comandoVerifica);
      if(action == "ISCRIZIONE" || action == "CLEAR")
      {
 if(verifica.getInt("matricola") != matricola){    //verifico l'esistenza
della matricola
    st.executeUpdate(comandoSQL);
    st.close();
 } else {
        if(action =="ISCRIZIONE"){
      error = "Il numero di matricola " + matricola
           + "\nrisulta già iscritto nella lista di:\n " + esame;
  }
  else{
      error = "Il numero di matricola " + matricola +
       "\nnon risulta iscritto all'esame di:\n" + esame;
  }
         JOptionPane.showMessageDialog(null,error,"Messaggio d'errore",
           JOptionPane.INFORMATION_MESSAGE);
  System.exit(1);
   }
      }
      //chiudo connessione
      stVerifica.close();
      con.close();
    }
    catch (Exception e){
   System.out.println("Impossibile eseguire Query");
   e.printStackTrace();
   return;
    }
  }
}

 }
Ad occhi ti dico qui perchè prima dell'else dovrebbero esserci 2 graffe.
Ps. Se hai una sola istruzione dopo l'if e/o else puoi fare a meno delle
graffe.
--------------------------------
Inviato via 
http://usenet.libero.it

scusate sono stato poco chiaro ...
l'errore si è verificato quando ho aggiunto Statement stVerifica e ho
inserito il costrutto if/else per verificare la presenza o meno della stessa
matricola nel DB con un errore del tipo:
---> errore nella posizione del cursore !!!!! che significa?
è corretto aprire due Statement per l'esecuzione di due query differenti o
ne basta uno solo ed utilizzarlo in questo modo:
Statement st;
st = con.createStatement();
ResultSet = st.executeQuery(comandoVerifica);
.....
st.executeUpdate(comandoSQL);
....
st.close();
.........


 ---> errore nella posizione del cursore !!!!! che significa?
Probabilmente la query non punta ad alcun record.
Dovresti agire sul resultSet solo se esiste una riga successiva!
Quindi
if (rs.next()) {
	matricola = rs.getInt("matricola);
}
se ti aspetti un solo record oppure ciclare in un while se te ne aspetti 
di +.
Un'ultima cosa.
E' consigliabile inserire le operazioni di chiusura in un finally in 
quanto potrebbero non essere raggiunte in caso di eccezioni impreviste.
quindi
try {
     ...operazioni varie...
} catch (Exception e) {
     ...oddio che e' successo...
} finally {
     ...butta via tutto...
}
ciao
-- 
Clark Gheibol
"Perchè tanto odio?"
"Olio di Hogorocchio - un stoffe famoso per bambini e erwazzene"

 if(verifica.getInt("matricola") != matricola){    //verifico l'esistenza
Il tuo errore è qui.
Prima di leggere da un ResultSet DEVI posizionarti sul primo record.
Cosa che si fa abitualmente chiamando next().
Leggi qua se ancora non l'hai fatto:
http://java.sun.com/j2se/1.4/docs/api/java/sql/ResultSet.html#next()
Concludo invitandoti a rivedere il Tutorial JDBC e ripensare il modo in cui 
chiudi le risorse che hai prima allocato: lo stai facendo in un modo 
piuttosto... inaffidabile, come ti ha anche già indicato Clark Gheibol.
HTH
-- 
Ciao
	Fabrizio C.

 ha scritto nel messaggio
news:3it_9.8863$YL4....@tornado.fastwebnet.it...


 ha scritto nel messaggio
news:MPG.18a4bd29a...@powernews.libero.it...


...
