Bom eu queria criar uma list para guardar os valores de um campo do meu select
eu estou com dúvidas em como fazer isso:
StringverificarStatus="SELECT * from computador_requisicao cr INNER JOIN usuario u ON (u.id_usuario = cr.idusuario) where u.id_usuario = "+Sessao.getInstancia().getUsuario().getId()+" ";try{PreparedStatementstatus=con.prepareStatement(verificarStatus);ResultSetrs=status.executeQuery();List<Requisicao>statusList=newArrayList<>();{while(rs.next()){}status.close();rs.close();}}catch(SQLExceptionex){}
o campo da tabela que eu queria salvar na lista (todos os registros do usuario)
cr.status
Eu queria salvar todos os registros de Status
para depois percorrer a lista
e se houver algum registro com o valor de 1 não fazer nada se não fazer um insert.
StringverificarStatus="SELECT * from computador_requisicao cr INNER JOIN usuario u ON (u.id_usuario = cr.idusuario) where u.id_usuario = "+Sessao.getInstancia().getUsuario().getId()+" ";try{PreparedStatementstatus=con.prepareStatement(verificarStatus);ResultSetrs=status.executeQuery();List<Requisicao>statusList=newArrayList<>();{while(rs.next()){Requisicaoreq=newRequisicao();req.setStatus(rs.getBoolean("status"));statusList.add(req);}status.close();rs.close();}
opa eu tinha conseguido
mas eu estou aqui quebrando uma cabeça
de como percorrer essa lista
e se tiver apenas resultados igual a 0 usar um insert
se existir um ou mais resultados true ou 1 no campo
inserir uma msg.
o campo que vou pegar cr.Status é boolean
eu tou pegando todas requisições criadas do usuario e queria verificar se ele tem alguma em andamento que é (1 ou true), se ele tiver não poderá criar a requisição.
Jonathan_Medeiros
Faz um for each da lista e testa o valor do atributo status, aí basta executar os comando que quiser de acordo com o status.
LostSpirit
Mas tipo, desse modo iria checar um por um não é? Tipo se o primeiro valor da lista for 0 ele já iria inserir, ou estou enganado?
Tipo eu queria inserir só depois de testar todos e se não tiver valor 1
Jonathan_Medeiros
Sim, seria dessa forma, pra fazer tudo depois você teria que criar duas listas separadas, dividir os registros entre elas de acordo com o status.
Qual o problema de fazer dessa forma?
LostSpirit
tipo eu tenho uma tabela requisição
onde tem o campo ativo: boolean / 1 = andamento / 0 finalizada.
o usuario vai criar uma requisição eu queria fazer essa verificação se ele tem alguma requisição em aberto se sim ele não conseguiria criar
e ao criar uma requisição eu seto como 1.
por isso na hora do select
where u.id_usuario = “+Sessao.getInstancia().getUsuario().getId()+”
eu pego o id do usuario logado .
se fosse dessa forma ele iria inserir mesmo se tiver campo status como 1 ( ou uma requisição em aberto )
Jonathan_Medeiros
Se você tratar a comparação de status não tem como ele inserir!
Só vai inserir se você permitir que o código se comporte dessa forma.
LostSpirit
teria como você me dar um exemplo?
Solucao aceita
LostSpirit
Consegui resolver:
Stringselect="SELECT * from computador_requisicao cr INNER JOIN usuario u ON (u.id_usuario = cr.idusuario) where u.id_usuario ="+Sessao.getInstancia().getUsuario().getId()+" and cr.status=1";PreparedStatementstmt2=con.prepareStatement(select);Alertsalerts=newAlerts();ResultSetrs2=stmt2.executeQuery();if(rs2.next()){alerts.reqAberta();}else{StringinserirRequisicao="INSERT INTO computador_requisicao(idusuario,nome,data_requisicao,observacao,status) VALUES("+Sessao.getInstancia().getUsuario().getId()+",?,now(),?,1)";try{con.setAutoCommit(false);PreparedStatementstmt=con.prepareStatement(inserirRequisicao);stmt.setString(1,r.getNome());stmt.setString(2,r.getMotivo());stmt.executeUpdate();stmt.close();con.commit();}