Newsgroup: it.comp.java
Titolo: Problema ResultSet

Ciao ragazzi e buon giorno!
Ho un nuovo problema che non riesco proprio a sbrogliare....
In compilazione non riesco a far passare questa classe perchè mi compare il
seguente messaggio
CalcolaMillesimi.java [49:1] Variable rsA may not have been initialized.
                try {codid=rsA.getInt(4);}
                           ^
In realtà compare anche per le altre istruzioni analoghe...
Penso,  non ci vuole molto che manchi un 'istruzione del tipo rsA=0 ma non
so quale sia la sintassi per inizializzare rsA cioè un resultSet....che ne
dite?
Questo è il codice della classe....
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.sql.*;
public class CalcolaMillesimi {
    /** Creates new CalcolaMillesimi */
    public CalcolaMillesimi(ConnettiDB db) {
        int[]
vettoreMill={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};/*inizializzazione
vettori*/
        String [] vettoreCab={""};
            String codapp;
            int contatore=1; /*inizializzazione variabili*/
            int indice=0;
            int codid;
            ResultSet rsA, rsB; /*dichiarazioni ResultSet*/
            codid=0;
            codapp="";
            while (contatore<21) /*ciclo che mi permette di prelevare un
dato numerico e una stringa dalla tabella ListaAppartamenti_Box e di
assegnarle a vettori int e stringa risp. sono certo che la tab ha
esettamente*/
            {
                try {
                Statement s1=db.connection.createStatement();
                String sqlstring1="SELECT * FROM ListaAppartamenti_Box
WHERE" + "ID=contatore";
                rsA= s1.executeQuery(sqlstring1);
                }
                catch (Exception e) {
                 System.out.println("Errore conn Lista appartamenti : " +
e.getMessage());
                 }
                indice=contatore-1;
                try {codid=rsA.getInt(4);}
                catch (Exception e) {
                 System.out.println("Errore prendere intero: " +
e.getMessage());
                 }
                try {codapp=rsA.getString(2);}
                catch (Exception e) {
                 System.out.println("Errore prendere stringa " +
e.getMessage());
                 }
                vettoreMill[indice]=codid;
                vettoreCab[indice]=codapp;
                contatore++;
            }
            int progr=0;
            int numeroCoinq=0;
            while (progr<21) /*Qui prelevo dalla tabella ListaCondomini il
numero di condomini che hanno il campo AppBoxProp= a ognuno dei valori
recuperati nella precedente query*/
            {
            try{
            Statement s2=db.connection.createStatement();
            String sqlstring2="SELECT * FROM ListaCondomini WHERE" +
"AppBoxProp=vettoreCab[progr]";
            rsB=s2.executeQuery(sqlstring2);
             }
            catch (Exception e) {
                 System.out.println("Errore #2  : " + e.getMessage());
                 }
            try {numeroCoinq=rsB.getRow();}
            catch (Exception e) {
                 System.out.println("Errore calcolo riga: " +
e.getMessage());
                 }
            float millEff=vettoreMill[indice]/numeroCoinq;
            try{
            Statement s3=db.connection.createStatement();
            String sqlstring3="UPDATE ListaCondomini " + "SET
MillesimiEffettivi=millEff" + "WHERE AppBoxProp LIKE vettoreCab[progr]";
            int num= s3.executeUpdate(sqlstring3);
            System.out.println("Articoli aggiornati"+num);
             }
            catch (Exception e) {
                 System.out.println("Errore #3: " + e.getMessage());
                 }
            progr++;
        }
}
}
Se qualcuno ha tempo (e soprattutto voglia può dare on occhio alle varie
istruzioni sql e vedere se possono essere corrette....altrimenti una volta
che la compilazione avrà successo valuterò io eventuali problemi
nell'esecuzione.
Grazie a tutti
--
Paolo Sanvito
paolo....@nasca-italy.com
p...@softhome.net

                 }
Infatti in caso di eccezione il programma prosegue regolarmente come
se niente fosse.
Supponi che la createStatement generi una SQLException: la variabile
rsA viene usata, ma non inizializzata.
Se vuoi ovviare a questo errore di compilazione, ci sono due soluzioni
di cui una corretta e una sporca. Quella corretta suggerisce di
gestire correttamente gli errori, in caso di eccezione NON deve andare
avanti a leggere il resultset come se niente fosse. 
Quella sporca è dichiarare:
ResultSet rsA = null;
ma preparati a gestire NullPointerException :-)

 ha scritto nel messaggio
news:mox48.9741$761.3...@twister1.libero.it...


Avevo visto qualcosa sul libro di Java&Datrabase che ho comprato ma per ora
ho preferito rimanere su qualcosa di più semplice perchè sono un
principiante....se una volta messo a posto il problema del ResultSet avessi
altre difficoltà con stringhe Java mi farò risentire e chiederò ancora una
volta aiuto!


Uhm...sinceramente non lo ho mai usato...è difficile (da come me l'hai
buttato lì....)
E' obbligatorio gestire l'eccezione?
Grazie per l'aiuto offertomi
Paolo

Facendo la sporca della sporca e cioè inizializzando a null senza eccezioni
non ho più errori in compilazione ma ho ancora una volta errori in
sqlstring...eppure ho il libro davanti....
Per esempio mi dà subito errore in questa chiamata
try {
                Statement s1=db.connection.createStatement();
                String sqlstring1="SELECT * FROM ListaAppartamenti WHERE
ID=contatore";
                rsA= s1.executeQuery(sqlstring1);
                }
                catch (Exception e) {
                 System.out.println("Errore conn Lista appartamenti : " +
e.getMessage());
                 }
Perchè???
Questo è un passo fondamentale per il mio progetto...devo riuscire a
risolvere questo problema di Sqlstring per poter proseguire!!!
Secondo voi dov'è l'errore?
In particolare mi dice
Errore conn Lista appartamenti : [Microsoft][Driver ODBC Microsoft Access]
Parametri insufficienti. PrevisException occurred during event dispatching:
Seguito poi da tutta una serie di errori che secondo me derivano da questo:
java.lang.ArrayIndexOutOfBoundsException
        at CalcolaMillesimi.<init>(CalcolaMillesimi.java:59)
        at
InsertTrimRata$InsertTrimRataAction.actionPerformed(InsertTrimRata.java:141)
        at
javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1450)
        at
javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(AbstractButto
n.java:1504)
        at
javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:3
78)
        at
javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:250)
        at
javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener
.java:216)
        at java.awt.Component.processMouseEvent(Component.java:3717)
        at java.awt.Component.processEvent(Component.java:3546)
        at java.awt.Container.processEvent(Cto 1.
Errore prendere intero: null
Errore prendere stringa null
ListaAppartamenti è una tabella con 5 colonne ID, CodApp, Millesimi, Piano,
Scala)
Vi prego aiutatemi a trovare la magagna che c'è nelle stringhe  sql da me
scritte!!!
Purtroppo sia il libro che ho davanti che il tutorial della sun fanno sempre
interrogazioni passando dei valori costanti e non delle variabili come devo
assolutamente fare io e penso questo sia il mio grande problema!
Salve ancora a tutti
Paolo