Stringmatricula="SELECT matricula.id_matricula matricula.numero_computador FROM usuario,matricula where usuario.id_usuario= "+Sessao.getInstancia().getUsuario().getId()+" and usuario.idmatricula = "+Sessao.getInstancia().getUsuario().getMatricula()+"";
tou com dúvida em como estrutura esse codigo sql
bom primeiro ele compara o id_usuario com o id do usuario logado e depois compara o idmatricula com o id da matricula do usuario logado (sei que isso é desnecessario ), minhas dúvida é como eu faria com esses 2 dados essa comparação:
usuario.idmatricula = matricula.id_matricula
Não sei se resolveria seu problema, mas você ja pensou em usar este campo como foreign key? Daí, ele como chave estrangeira você conseguiria manipulá-lo melhor, creio eu…
LostSpirit
mas já é chave estrangeira mano,
eu queria buscar essa chava com o id do usuario q eu guardo no singleton
mas não estou sabendo como fazer .
(essa é a conta q eu utilizo no meu trabalho)
Jonathan_Medeiros2 likes
Acredito que um simples join resolva!
Exemplo:
SELECTm.id_matricula,m.numero_computadorFROMusuariouINNERJOINmatriculamON(u.idmatricula=m.id_matricula)WHEREu.id_usuario=//Informe ID do usuário logadoANDu.idmatricula=//Informa ID da matrícula do usuário logado
LostSpirit
deu certo mano mt obrigado.
Você poderia me tirar mais uma dúvida?
Bom eu tenho a tabela permissão que tem o id / nome da permissão
e a tabela matricula que tem o id / o numero da matricula / numero do computador
tou com dúvida ao criar uma conta como eu faria esses insert’s
pq a tabela usuario recebe as chaves estrangeira de matricula / numero computador
eu sei que terei que fazer um commit de todos os insert’s , mas não tenho ideia a logica que vou usar nesses insert’s pois terá que ser em tabelas diferentes.
Antes de cadastrar um novo usuário já devem existir registros na tabela matrícula e permissão, com isso basta informar os ID’s de matrícula e permissão no insert de usuário.
mesmo esse id matricula e id permissão sendo auto increment?
pq id permissão eu coloquei como auto increment
e matricula também
permissão creio que não fosse necessário, mas matricula acho que sim, por que vão ser muitos registros.
Jonathan_Medeiros
Se são auto incrementais você não precisa passá-los, o próprio BD gerencia isso pra você nesse caso.
A única coisa é, obtenha os ID’s das chaves estrangeiras de matrícula e permissão antes de inserir o usuário, o resto segue o mesmo padrão pra tudo.
LostSpirit
você pdoeria me dar um help de como faria isso? estou meio travado nessa parte.
Jonathan_Medeiros
Sem saber no que exatamente você está com dificuldade e como estão os seus códigos fica difícil te dar um help…
Imagino que você tenha uma tela para cadastrar os usuários certo?
Nessa tela você deve ter os campos para que sejam informados a matrícula e a permissão certo?
Basta pegar os valores destes dois campos, validar se eles são valores válidos no BD (Um SELECT simples), caso não sejam válidos informe o usuário, e se forem válidos faça o INSERT normalmente igual já te mostrei em uma resposta anterior.
LostSpirit
sim vou tentar
no caso seria a tela de cadastro de administrador
a pessoa iria cadastrar a matricula o numero do computador
e a categoria da pessoa (usuario nroaml, estagiario, adm)
então eu tive algumas ideias
como dar insert na tabela matricula e guardar as chaves com ```
RETURN_GENERATED_KEYS
voutestarpraver
LostSpirit
Stringsql="INSERT INTO MATRICULA(numero_matricula, numero_computador) VALUES(?, ?)";PreparedStatementstmt;try{stmt=connection.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);stmt.setString(1,getMatricula());stmt.setString(2,getNumero_computador());stmt.executeUpdate();ResultSetrs=stmt.getGeneratedKeys();rs.next();intidGerado=rs.getInt(1);matricula.setId(idGerado);
ficaria algo assim, minha dúvida é como eu conseguiria commitar isso junto com esses outros 2 insert’s
Jonathan_Medeiros1 like
Se esta forma que você implementou estiver funcionando, não tem segredo em aplicar o commit, pois todos os 3 inserts vão estar contidos na mesma transação!
LostSpirit
opa man essa forma deu certo, mas encontrei um problema no segundo insert
ele funciona normalmente recebe todos os valores certinho, mas na hora de inserir não vai:
publicbooleancadastrar(Usuariou,Matriculam)throwsSQLException{PreparedStatementmatricula=con.prepareStatement("INSERT INTO MATRICULA(numero_matricula, numero_computador) VALUES(?, ?)",PreparedStatement.RETURN_GENERATED_KEYS);matricula.setInt(1,m.getNumero_matricula());matricula.setInt(2,m.getNumero_computador());try{con.setAutoCommit(false);matricula.executeUpdate();ResultSetrs=matricula.getGeneratedKeys();rs.next();LongidGerado=rs.getLong(1);Sessao.getInstancia().getMatricula().setId_matricula(idGerado);PreparedStatementcadastrar=con.prepareStatement("INSERT INTO USUARIO(idpermissao,idmatricula, login, senha, nome) VALUES("+u.isAdm()+","+idGerado+",?,?,?)");cadastrar.setString(1,u.getLogin());cadastrar.setString(2,u.getSenha());cadastrar.setString(3,u.getNome());cadastrar.executeUpdate();}catch(Exceptione){con.rollback();returnfalse;}con.commit();returntrue;}
e o pior não apresenta nenhum error.
vai direto para essa parte do meu codigo: