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:
String verificarStatus = "SELECT * from computador_requisicao cr INNER JOIN usuario u ON (u.id_usuario = cr.idusuario) where u.id_usuario = "+Sessao.getInstancia().getUsuario().getId()+" ";
try {
PreparedStatement status = con.prepareStatement(verificarStatus);
ResultSet rs = status.executeQuery();
List<Requisicao> statusList = new ArrayList<>();{
while (rs.next()) {
}
status.close();
rs.close();
}
} catch (SQLException ex) {
}
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.
Basta instanciar um novo objeto do tipo esperado pela lista, recuperar seus valores do resultset e adicionar o objeto na lista!
Exemplo
while (rs.next()) {
Requisicao req = new Requisicao();
req.setSeuCampoString(rs.getString("suaColunaDoBanco"));
statusList.add(req);
}
1 curtida
String verificarStatus = "SELECT * from computador_requisicao cr INNER JOIN usuario u ON (u.id_usuario = cr.idusuario) where u.id_usuario = "+Sessao.getInstancia().getUsuario().getId()+" ";
try {
PreparedStatement status = con.prepareStatement(verificarStatus);
ResultSet rs = status.executeQuery();
List<Requisicao> statusList = new ArrayList<>();{
while (rs.next()) {
Requisicao req = new Requisicao();
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.
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.
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
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?
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 )
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.
teria como você me dar um exemplo?
Consegui resolver:
String select = "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";
PreparedStatement stmt2 = con.prepareStatement(select);
Alerts alerts = new Alerts();
ResultSet rs2 = stmt2.executeQuery();
if (rs2.next()){alerts.reqAberta();}
else{
String inserirRequisicao = "INSERT INTO computador_requisicao(idusuario,nome,data_requisicao,observacao,status) VALUES("+Sessao.getInstancia().getUsuario().getId()+",?,now(),?,1)";
try {
con.setAutoCommit(false);
PreparedStatement stmt = con.prepareStatement(inserirRequisicao);
stmt.setString(1, r.getNome());
stmt.setString(2, r.getMotivo());
stmt.executeUpdate();
stmt.close();
con.commit();
}