Newsgroup: it.comp.java
Titolo: PreparedStatement

Salve a tutti,
sto proseguendo nel mio progetto ma ho ancora dei problemi in una classe che
deve connettersi al database prendere alcuni dati da delle tabelle fare
delle operazioni con dei dati immessi dall'utente e quindi scrivere i
risultati in una colonna della tabella.
Poichè nelle query dovevo ovviamente usare dei parametri mi era già stato
suggerito, da Carmine qualche post più in basso, di utilizzare le query
parametriche e così stamattina e ieri sera le ho un po' studiate...
dopo aver modificato il codice della mia classe non sono ancora riuscito a
vedere il risultato desiderato perchè continuano a lanciarsi eccezioni già
sulla prima connessione (anzi prob. il primo errore genera gli altri....
Nello specifico la questione è secondo me nel mex Errore conn Lista
appartamenti : [Microsoft][Driver ODBC Microsoft Access] Parametri
insufficienti. Previsto 2. che proprio non riesco a interpretare!!
Vi riporto sia il messaggio di errore datomi sia il codice della mia classe.
Spero che qualcuno di voi mi possa aiutare perchè sono impantanato
Grazie Paolo
Exception occurred during event dispatching:
java.lang.ArrayIndexOutOfBoundsException
        at CalcolaMillesimi.<init>(CalcolaMillesimi.java:63)
        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(Container.java:1164)
        at java.awt.Component.dispatchEventImpl(Component.java:2595)
        at java.awt.Container.dispatchEventImpl(Container.java:1213)
        at java.awt.Component.dispatchEvent(Component.java:2499)
        at
java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:2451)
        at
java.awt.LightweightDispatcher.processMouseEvent(Container.java:2216)
        at java.awt.LightweightDispatcher.dispatcErrore conn Lista
appartamenti : [Microsoft][Driver ODBC Microsoft Access] Parametri
insufficienti. Previsto 2.
Errore prendere intero: null
Errore prendere stringa null
Errore conn Lista appartamenti : [Microsoft][Driver ODBC Microsoft Access]
Parametri insufficienti. Previsto 2.
Errore prendere intero: null
Errore prendere stringa null
hEvent(Container.java:2125)
        at java.awt.Container.dispatchEventImpl(Container.java:1200)
        at java.awt.Window.dispatchEventImpl(Window.java:912)
        at java.awt.Component.dispatchEvent(Component.java:2499)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:319)
        at
java.awt.EventDispatchThread.pumpOneEvent(EventDispatchThread.java:103)
        at
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:84)
La mia 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*/
            rsA=null;
            rsB=null;
            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 {
                PreparedStatement pst=null;
                /*Statement s1=db.connection.createStatement();*/ vecchio
codice
                String query1="SELECT ID, CodAppBox FROM ListaAppartamenti
WHERE ID =?";
                pst=db.connection.prepareStatement(query1);
                pst.setInt(1,contatore);
                rsA= pst.executeQuery();
                }
                catch (Exception e) {
                 System.out.println("Errore conn Lista appartamenti : " +
e.getMessage());
                 }
                indice=contatore-1;
                try {codid=rsA.getInt("ID");}
                catch (Exception e) {
                 System.out.println("Errore prendere intero: " +
e.getMessage());
                 }
                try {codapp=rsA.getString("Cod_App_Box");}
                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=?";
            PreparedStatement pst2=null;
            pst2=db.connection.prepareStatement(sqlstring2);
            pst2.setString(1,vettoreCab[progr]);
            rsB=pst2.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();*/
            PreparedStatement pst3=null;
            String sqlstring3="UPDATE ListaCondomini " + "SET
MillesimiEffettivi=millEff" + "WHERE AppBoxProp =?";
            pst3=db.connection.prepareStatement(sqlstring3);
            pst3.setString(1,vettoreCab[progr]);
            int num= pst3.executeUpdate(sqlstring3);
            System.out.println("Articoli aggiornati"+num);
             }
            catch (Exception e) {
                 System.out.println("Errore #3: " + e.getMessage());
                 }
            progr++;
        }
}
}



 ha scritto nel messaggio
news:d%S48.14688$761.4...@twister1.libero.it...
