Tenho um ResultSet que busca nomes de usuarios (57 nomes diferentes) no banco de dados, porém ele retorna 57 valores iguais.
O que há de errado?
Código:
public List<Usuario> findAll() {
String SQL = "SELECT nome FROM usuario";
PreparedStatement stmt = null;
ResultSet rs = null;
List<Usuario> usuarios = new ArrayList<>();
try {
stmt = con.prepareStatement(SQL);
rs = stmt.executeQuery();
while (rs.next()) {
Usuario usuario = new Usuario();
usuario.setNome(rs.getString("nome"));
//FALTA ALGO
usuarios.add(usuario);
}
} catch (SQLException ex) {
System.err.println("Erro: " + ex);
} finally {
ConnectionFactory.closeConnection(con, stmt, rs);
}
//System.out.println(usuarios);
return usuarios;
}
Esta classe Usuario só tem nome como atributo? Você poderia tentar
apenas por experiência usar um construtor informando o nome assim:
usuarios.add(new Usuario(rs.getString("nome"));
Não.
Os atributos são nome, matricula, senha e tipo.
Já tentei com os outros atributos e nada.
tem algo errado no ResultSet, mas não achei.
Qual o método que imprime os usuários?
Use o debug, marque a linha que adiciona na lista.
Navegue nos índices e verifique os nomes.
O objetivo e ler o nome dos usuarios e popular uma jcombobox.
Nem acredito que to me batendo com isso.
Esta é a parte que popula o jcombobox:
private void buscaUsers() {
UsuarioDAO dao = new UsuarioDAO();
List<Usuario> users = dao.findAll();
DefaultComboBoxModel cbmodel = new DefaultComboBoxModel(users.toArray());
cbUsers.setModel(cbmodel);
}
Você conferiu se há 57 registros diferentes no banco de dados???
while (rs.next()) {
Usuario usuario = new Usuario();
usuario.setNome(rs.getString("nome"));
System.out.println(rs.getString("nome"));//olhar o que está sendo impresso
//FALTA ALGO usuarios.add(usuario);
}
1 curtida
Opa!
Agora deu uma luz.
Está imprimindo os nomes corretamente, mas na lista todos os nomes são iguais ao último.
Resolvido.
Mudei o tipo da lista pra String.
public List findAll() {
String SQL = “SELECT nome FROM usuario”;
PreparedStatement stmt = null;
ResultSet rs = null;
List<String> usuarios = new ArrayList<>();
try {
stmt = con.prepareStatement(SQL);
rs = stmt.executeQuery();
while (rs.next()) {
Usuario usuario = new Usuario();
usuario.setNome(rs.getString("nome"));
//System.out.println(rs.getString("nome"));
usuarios.add(rs.getString("nome"));
// usuarios.add(usuario);
}
} catch (SQLException ex) {
System.err.println("Erro: " + ex);
} finally {
ConnectionFactory.closeConnection(con, stmt, rs);
}
System.out.println(usuarios);
return usuarios;
}
private void buscaUsers() {
UsuarioDAO dao = new UsuarioDAO();
List users = dao.findAll();
DefaultComboBoxModel cbmodel = new DefaultComboBoxModel(users.toArray());
cbUsers.setModel(cbmodel);
}
Falai @scheleder Bom dia
Ja sei que seu problema ja esta resolvido mas teria como postar o codigo da sua classe Usuario?
Abraços
Max
Remova o static pois ele é para atributos pertencentes à classe, assim os atributos serão do objeto.
Por isso imprimia sempre o último nome encontrado na busca.
1 curtida
Sabia que tinha algo de muito estranho nessa classe Usuario
1 curtida