Newsgroup: it.comp.java
Titolo: missing return statement

Allora ho un metodo creaLista() che mi dovrà restituire un array di
stringhe, a questo passo un ResultSet e un parametro di testo di nome
tipo. Vorrei che l'array che dovrebbe restituirmi sia visibile a tutta
la classe.
Amesso di non aver sbagliato nient'altro dove và messo il return
(visto che mi dà errore di missing return statement)
codice:
    private String[] creaLista(ResultSet cursore, String tipo) {
            try {
            cursore.last();
            int numRows = cursore.getRow();
            cursore.beforeFirst();
            int i = 0;
            String[] lista = new String[numRows];
                while(cursore.next()) {
                   lista[i] = cursore.getString(tipo);
                   i++;
                }
            } catch (SQLException e) {
                alerts.showErr(e.getMessage());
            }
    }

     }
Meglio così secondo me:
...
import java.util.ArrayList;
...
private String[] creaLista(ResultSet cursore, String tipo)
throws SQLException {
   ArrayList<String> lista=new ArrayList<String>();
   while(cursore.next) lista.add(cursore.getString(tipp));
   return lista.toArray(new String[lista.size()]);
}
Perchè ho portato l'eccezione all'esterno? Perchè questa procedura mi
sa tanto di funzione di utilità, e oltretutto un ResultSet deve
rimanere aperto il meno possibile, e visto che presto dovrai fare un
close() di quel cursore, e visto che anche la close() potrebbe lanciare
una SQLException, potresti gestire l'eccezione di entrambi in un solo
posto.
Ho tolto le chiamate a last() e beforeFirst() perchè non sono accettate
da tutti i driver JDBC. Usando solo next() scorri l'intero ResultSet
una volta sola, e ti garantisci una compatibilità al 100% con tutti i
database.
Hope That Helps
-- 
Scientology: se la conosci la eviti, se la conosci non ti uccide...
http://xenu.com-it.net
 - 
http://xenu.freewinds.cx
 - 
http://www.xenu.net
(per rispondere personalmente leva IlDitoDalCulo)
http://www.webalice.it/ech3l0n/HastaLaVictoria.jpg
   -   Siempre!

 }
Ulp!!! Hai fatto un errore gravissimo, hai scritto 'tipp' al posto di
'tipo'!!!! :)
Per il resto quoto.
Un'osservazione: nel caso ti serva, Mariano (ho il sospetto di sě), potresti
direttamente fare:
private ArrayList creaLista(ResultSet cursore, String[] tipi) throws
SQLException {
    ArrayList<HashMap> lista = new ArrayList<HashMap>();
    while (cursore.next()) {
        HashMap<String, String> record = new HashMap<String, String>();
        for (...tipi...) {
            ...riempi hashmap...
        }
        lista.add(record);
    return lista;
}

Funziona alla grande...
Ora vorrei sapere come usarlo...
ad es.
private void formWindowOpened(java.awt.event.WindowEvent evt)
{
        ResultSet rs = mdbc.inviaQuery("SELECT ..........");
        try {
            rs.next();
            // ========== SCHEDA ANAGRAFICA
            txtNome.setText(rs.getString("NOME"));
            ....
}
private void initComponents() {
...
       MIAJLIST.setModel(new javax.swing.AbstractListModel() {
            String[] pippo = { "come", "stai?" };
            public int getSize() { return pippo.length; }
            public Object getElementAt(int i) { return pippo[i]; }
        });
...
}
Così è tutto OK e nella jList MIAJLIST è stampato l'array pippo.
Siccome l'array che mi serve non è pippo ma quello che mi viene
ritornato dal metodo che hai scritto tu prima, Mi servirebbe sapere
come fare. Sarebbe utile per dirti, richiamare il metodo creaLista nel
formWindowOpened associandolo ad un nuovo array (visto che creaLista
và usato minimo 3 volte, sarebbe utile questa riassegnazione)  e il
nuovo array passarlo nel setModel dell'initComponents (al posto di
pippo per intenderci).
Grazie.

Allora come ho detto tutto sembra funzionare alla perfezione ora...
siccome ho esigenza di richiamare quel metodo minimo 3 volte per 3
cose diverse mi servirebbero anche 3 array con nomi diversi che
vengano visti ovunque all'interno della classe.
Ho fatto così:
================================
public class .... {
     private String[] variabile
     //...
}
//...
variabile = creaLista(rs, "MIOTIPO");
//...
================================
ma a quanto pare prende solo il primo valore, cioè quello di indice 0,
se cerco di fare un print su variabile[1] mi dà errore di out of
bound.
Chi mi aiuta?


TUTTO RISOLTO, grazie mille.