DAO não lança exception nem nada[RESOLVIDO]

4 respostas
P

Boa tarde galera, tenho um DAO que retor uma lista caso tenha resultado. Mas não está retornando. chega no if(rs.next()) e fala que é falso.

public static ArrayList<Users> listMember(){ try{ SQLConnection.connect(); String sql = "select * from user where authority in(?????)"; pstmt = SQLConnection.getConnection().prepareStatement(sql); pstmt.setString(1, "ROLE_PRES"); pstmt.setString(2, "ROLE_RH"); pstmt.setString(3, "ROLE_PROJ"); pstmt.setString(4, "ROLE_MARK"); pstmt.setString(5, "ROLE_FINA"); rs = pstmt.executeQuery(); if(rs.next()){ listMember = new ArrayList<Users>(); do{ user = new Users(); user.setAuthority(formatRole(rs.getString("authority"))); user.setEmail(rs.getString("email")); user.setUsername(rs.getString("username")); user.setLastName(rs.getString("lastName")); user.setName(rs.getString("name")); user.setOccupation(rs.getString("occupation")); user.setPhotoPath(rs.getString("photoPath")); user.setProject(rs.getString("project")); listMember.add(user); }while(rs.next()); } pstmt.close(); rs.close(); SQLConnection.destroyConnection(); return listMember; }catch(Exception e){ e.printStackTrace(); return null; } }

OBS: fiz o a query no terminal e retornou o resultado desejado.

Quem puder ajudar, ficarei muito grato.

4 Respostas

zanata

Oi.

Não vi o restante do código, mas a sua cláusula SQL está com problemas. Não sei qual é o banco de dados ou o driver jdbc que você está utilizando, mas a “falha” não foi detectada por nenhum deles. Talvez porque seja considerado correto pelo analisador.

A sua cláusula:

select * from user where authority in(?????)

O correto, NESSE CASO, seria (desconsiderando o que seria melhor ou pior para uma cláusula como essa):

select * from user where authority in(?, ?, ?, ?, ?)

Faltaram as vírgulas.

[]s

raptor.x

Ola,

Em meus codigos, usaria o laço da seguinte forma...

listMember = new ArrayList<Users>();  
while (rs.next()){ //enquanto for verdadeiro, execute.
       user = new Users();  
       user.setAuthority(formatRole(rs.getString("authority")));  
       user.setEmail(rs.getString("email"));  
       user.setUsername(rs.getString("username"));  
       user.setLastName(rs.getString("lastName"));  
       user.setName(rs.getString("name"));  
       user.setOccupation(rs.getString("occupation"));  
       user.setPhotoPath(rs.getString("photoPath"));  
       user.setProject(rs.getString("project"));  
       listMember.add(user);  
}
pstmt.close();  
rs.close();  
SQLConnection.destroyConnection();  
return listMember;  

catch(Exception e){  
       e.printStackTrace();  
       return null;  
}

Espero ter ajudado!

P

Era esse mesmo o problema, muito obrigado.
Mas o estranho é que não é lançado nenhuma exception pra esse erro, deveria criar no IndexOutOfBoundsException ou SQLEception, sei lá :slight_smile:
Surgiu outro problema, mas não é nesse fórum, é web. Problema tá no struts2. Coisa doida que ta acontecendo, ta tentando converter uma String pra inteiro e não tá conseguindo, e olha que eu nem to pedindo pra fazer isso, mas tudo bem. Vou pesquisar pra ver se alguém tem o o mesmo problema.
Muito obrigado novamente

P
Ola,

Em meus codigos, usaria o laço da seguinte forma...

view plaincopy to clipboardprint?

listMember = new ArrayList<Users>();    
    while (rs.next()){ //enquanto for verdadeiro, execute.  
           user = new Users();    
           user.setAuthority(formatRole(rs.getString("authority")));    
           user.setEmail(rs.getString("email"));    
           user.setUsername(rs.getString("username"));    
           user.setLastName(rs.getString("lastName"));    
           user.setName(rs.getString("name"));    
           user.setOccupation(rs.getString("occupation"));    
           user.setPhotoPath(rs.getString("photoPath"));    
           user.setProject(rs.getString("project"));    
           listMember.add(user);    
    }  
    pstmt.close();    
    rs.close();    
    SQLConnection.destroyConnection();    
    return listMember;    
      
    catch(Exception e){    
           e.printStackTrace();    
           return null;    
    }

Espero ter ajudado!

Você tem razão, o while é um teste. Vou começar a fazer dessa maneira. Muito obrigado :)

Criado 28 de novembro de 2011
Ultima resposta 28 de nov. de 2011
Respostas 4
Participantes 3