Dúvida com lista de dados

6 respostas
C

Galera,
Estou com uma dúvida simples com uma lista de dados vindo de um banco é o seguinte:

.....
while (rs.next()){

MonitoriaOperador m = new MonitoriaOperador ();

m.setIdMonitoria(rs.getInt("idmonitoria"));
m.setIdUsuarioSistema(rs.getInt("idUsuarioSistema"));

lista.add(m);

Só que esse IdUsuarioSistema é um tipo Usuario ( relacionamento ) como eu seto essa informação aqui nesse caso?

6 Respostas

nel

Oi,

como trata-se de JDBC, o que tu precisa fazer é pegar esse ID e em seguida realizar um find pela chave primária do usuário.
Dessa forma, tu cria um objeto usuário e seta ele no seu objeto de retorno.

C

nel,
vc poderia me dar um exemplo só pra contextualizar o que você disse?

nel

CaioNascimento:
nel,
vc poderia me dar um exemplo só pra contextualizar o que você disse?

Claro.

// supondo que a chave primária do usuário seja um inteiro public Usuario findById(int id) { // rs = resultSet populado e etc Usuario user = new Usuario(); while(rs.next()) { user.setNome(rs.getString("nome")); // outros atributos } return user; }

while (rs.next()){   
  
MonitoriaOperador m = new MonitoriaOperador ();   
  
m.setIdMonitoria(rs.getInt("idmonitoria"));   
m.setIdUsuarioSistema(rs.getInt("idUsuarioSistema"));   

Usuario user = this.findById(m.getIdUsuarioSistema));
m.setUsuario(user);
  
lista.add(m);

Seria basicamente isso.

C
Então nesse seu exemplo vc usou o
m.setIdUsuarioSistema(rs.getInt("idUsuarioSistema"));
mas é justamente aqui que está o erro, esse setIdUsuario é do tipo Usuario. criei o metodo find: Classe UsuarioDaoMysql onde fica todo os meus metodos.
public Usuario findById(int id){
		
		try {
			String sql = "select * from usuario";
			Statement stmt;
			stmt = conn.createStatement();
			ResultSet rs = stmt.executeQuery(sql);

			Usuario user = new Usuario();
			while (rs.next()){
				user.setIdUsuario(rs.getInt("idUsuario"));
			}
			return user;

		}  catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
}

Abaixo a lista que preciso adicionar o idUsuario:

Classe MonitoriaOperadorDaoMysql

public List<MonitoriaOperador> listarMonitoriaOperador() {
	      
		   try {
        String sql = "select * from monitoriaoperador";
        Statement stmt = conn.createStatement();
        ResultSet rs = stmt.executeQuery(sql);
        List<MonitoriaOperador> lista = new ArrayList();
        
        while (rs.next()) {

            MonitoriaOperador m = new MonitoriaOperador();
            UsuarioDaoMysql user = new UsuarioDaoMysql();

            // tentei assim
            user.findById(m.getIdOperador().getIdUsuario());
 
            m.setIdMonitoria(rs.getInt("idmonitoria"));
            m.setData(rs.getString("Data"));

            // Aqui esse retorna o erro: recebe um tipo Usuario e não UsuarioDaoMySql.
            m.setIdUsuarioSistema(user);

            m.setTitulo(rs.getString("Titulo"));
            m.setComentario(rs.getString("Comentario"));
            lista.add(m);
        }
        
        rs.close();
R

Não entendi muito bem o que você quis dizer… seria algo assim?

Objeto MonitoriaOperador

public class MonitoriaOperador{
   private int idMonitoria;
   private Usuario usuario;

   //getters e setters
}

Consulta de Usuario

public Usuario findById(Usuario usuario){
   //rs = busca ao banco pelo id informado pelo objeto passado pelo parametro;
   while(rs.next()){
      usuario.setIdUsuario(rs.getInt("id_usuario"));
      usuario.setNomeUsuario(rs;getString("nome_usuario"));
   }
   return usuario;
}

Construção da lista de Monitorias:

while(rs.next()){
   MonitoriaOperador m = new MonitoriaOperador();

   m.setIdMonitoria(rs.getInt("id_monitoria"));
   m.getUsuario.setIdUsuario(rs.getInt("id_usuario"));
   Usuario usu = this.findById(m.getUsuario());
   m.setUsuario(usu);
}
nel
renangd:
Não entendi muito bem o que você quis dizer... seria algo assim? Objeto MonitoriaOperador
public class MonitoriaOperador{
   private int idMonitoria;
   private Usuario usuario;

   //getters e setters
}
Consulta de Usuario
public Usuario findById(Usuario usuario){
   //rs = busca ao banco pelo id informado pelo objeto passado pelo parametro;
   while(rs.next()){
      usuario.setIdUsuario(rs.getInt("id_usuario"));
      usuario.setNomeUsuario(rs;getString("nome_usuario"));
   }
   return usuario;
}
Construção da lista de Monitorias:
while(rs.next()){
   MonitoriaOperador m = new MonitoriaOperador();

   m.setIdMonitoria(rs.getInt("id_monitoria"));
   m.getUsuario.setIdUsuario(rs.getInt("id_usuario"));
   Usuario usu = this.findById(m.getUsuario());
   m.setUsuario(usu);
}

Exatamente isso. O JDBC não vai lhe trazer o objeto populado, o JPA faria isso.
Mas estamos falando em JDBC e portanto, isso deve ser feito de forma manual :)

E mais um detalhe, no banco tu não "joga" uma tabela inteira dentro de outra, tu adiciona uma referência, conhecida como Chave Estrangeira.

Criado 8 de novembro de 2011
Ultima resposta 8 de nov. de 2011
Respostas 6
Participantes 3