Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    31

    errore "Array index out of range: 0"

    ciao,
    questa catena di metodi mi restituisce l'errore "Array index out of range: 0".

    Una servlet riceve da un form username e password e chiama il metodo esisteAccount per vedere se è memorizzato sul database; in questo caso effettua il login:

    codice:
                     String username=request.getParameter("username");
            String password=request.getParameter("password");
    
    
            HttpSession session=request.getSession();
                        
            AccountDAO account=new AccountDAO();
            
    Account a=new Account(username,password);
    Account b=account.esisteAccount(a);
    if(username.equals(b.getNome()) && password.equals(b.getPassword()))
    {            
        session.setAttribute("aut", true);
        Cookie cookie= new Cookie("nome",username);
        cookie.setMaxAge(10);    
        response.addCookie(cookie);
        
        response.sendRedirect("riservata.jsp");
        
    }else
    {
        session.invalidate();
    
    
    Cookie cookie= new Cookie("nome","");
    cookie.setMaxAge(0);
    response.addCookie(cookie);
        
        response.sendRedirect("errore.html");
    }

    Il metodo esisteAccount sta nella classe AccountDAO, ed effettua la query:

    codice:
    public Account esisteAccount(Account account)    {
            String query = "SELECT * FROM Account WHERE nome = "+ account.getNome();
            Vector<Object> v =db.executeSelect(query, "Account");
            account = (Account)v.get(0);
            return account;
            
        }

    Il metodo executeSelect sta nella classe DBManager:

    codice:
    public Vector<Object> executeSelect(String sql, String type)
        {
            startConnection();
            Vector<Object> v = new Vector<Object>();
            Statement st;
            try 
            {
                st = conn.createStatement();
            
                ResultSet rs = st.executeQuery(sql);        
                while( rs.next() )
                {
                    if ( type.equals("Account") )
                    {
                        Account u;
                        u = new Account();
                        u.setNome( rs.getString("Nome") );
                        u.setPassword( rs.getString("Password") );
                        v.add(u);
                    }
                }
            } 
            catch (SQLException e) 
            {
                e.printStackTrace();
            }
            
            closeConnection();
            return v;
        }

    So che l'errore sta nella servlet nelle righe

    codice:
    Account a=new Account(username,password);
    Account b=account.esisteAccount(a);

    ma non capisco il perchè: il risultato della query è di tipo Account e lo sto assegnando a un oggetto Account...
    Ultima modifica di LeleFT; 21-04-2015 a 08:43 Motivo: Aggiunti i tag CODE

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da cri43 Visualizza il messaggio
    chiama il metodo esisteAccount per vedere se è memorizzato sul database

    Vector<Object> v =db.executeSelect(query, "Account");
    E se non è memorizzato su db .... mi sembra abbastanza comprensibile che il Vector possa essere "vuoto" (0 elementi) e quindi v.get(0) non lo puoi fare.


    P.S. Ci sarebbero parecchie altre cose da farti notare dubbie/inappropriate .... ma stasera purtroppo non avrei tempo di approfondire.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it L'avatar di bstefano79
    Registrato dal
    Feb 2004
    Messaggi
    2,520
    da un metodo che si chiama esisteAccount mi aspetterei che tornasse un booleano

    codice:
    public boolean esisteAccount(Account account)    {
            String query = "SELECT * FROM Account WHERE nome = "+ account.getNome();
            Vector<Object> v =db.executeSelect(query, "Account");
           
            return v.size()>0;
            
        }

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    31
    Quote Originariamente inviata da andbin Visualizza il messaggio
    E se non è memorizzato su db .... mi sembra abbastanza comprensibile che il Vector possa essere "vuoto" (0 elementi) e quindi v.get(0) non lo puoi fare.
    Non pretenderei tanto, ovviamente la tabella account sul db è popolata

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Sì, ma quella query con buona probabilità non restituisce alcunchè... almeno per le stringhe, tutti i DBMS pretendono che queste siano inserite tra apici.

    Quindi, almeno, l'istruzione SQL dovrebbe essere così:

    codice:
    String query = "SELECT * FROM Account WHERE nome = '" + account.getNome() + "'";

    Sempre ammesso che il DBMS non faccia differenza fra maiuscole e minuscole, altrimenti ti devi anche preoccupare di normalizzare o di trovare una corrispondenza esatta.

    Senza contare che query secche in quel modo si cerca sempre di evitarle per problemi di conversione fra tipi (caratteri contenenti apici che vanno quotati, date che vanno espresse con formati diversi a seconda del DBMS usato, valori numerici che possono o meno essere racchiusi tra apici, ecc). Si tende ad usare le PreparedStatements, che si occupano da sole della corretta formattazione delle istruzioni SQL.


    Ciao.
    Ultima modifica di LeleFT; 21-04-2015 a 12:44
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.