Sistema de Controle de Horas [Resolvido]

22 respostas
mateus.cordeiro

Boa tarde a todos.

Estou desenvolvendo um sistema de cadastro de horas de funcionario para um simples controle de entrada e saida para a gerencia.
Como fiz um curso de JAVA e nesse curso foi aborado apenas o J2SE, assim estou fazendo em Swing (NetBeans e Mysql)
Porem estou quebrando a cabeça e estou andando muito lento no projeto. Infelizmente o projeto sou eu e eu! Por isso conto com a ajuda de quem puder ajudar!

Já tenho o seguinte senario:

Cadastro de Usuario (Funcionando com o banco perfeito)!
Login - esse está sendo o problema, como cada usuario terá que se logar, preciso autorizar e salvar o codigo do usuario.
Estou neste problema agora, o metodo não retorna o idusuario para poder salvar junto com o horario no banco:

Class para validar o login:

package controlehoras;

import conexao.ConexaoDB;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import util.Usuario;

public class ValidarLogin {
        public Usuario validar(String nome, String senha) throws SQLException {
        String select = "SELECT * FROM usuario WHERE nome = ? and senha = ?";
        Usuario usuario = null;
        PreparedStatement stmt = ConexaoDB.getConnection().prepareStatement(select);
        stmt.setString(1,nome);
        stmt.setString(2,senha);
        ResultSet rs = stmt.executeQuery();
        
        if (rs.next()){
            usuario = new Usuario();
            usuario.setIdusuario(rs.getInt("idusuario"));
         }

        rs.close();
        stmt.close();
        return usuario;
}
        public Usuario retornaID(String nome, String senha) throws SQLException {
        ValidarLogin login = new ValidarLogin();
        return (Usuario) login.validar(nome,senha);
    }
public static void main(String [] args) throws SQLException{
    
        ValidarLogin login = new ValidarLogin();
        System.out.println(login.retornaID("Mateus", "mateus123"));
    }

Porem ele retonar isso: util.Usuario@787171
E eu preciso na verdade o idusuario para salvar a sua entrada!
Quem puder ajudar, por favor!
Obrigado

22 Respostas

cloude

Faça assim que resolve seu problema.

public static void main(String [] args) throws SQLException{  
      
        ValidarLogin login = new ValidarLogin();  
        Usuario usuario = login.retornaID("Mateus", "mateus123");
        System.out.println( usuario.getId() );  
    }
mateus.cordeiro

Muito obrigado! Agora vou tentar salvar o ID e a Data no banco!
Obrigado novamente Cloude!

X

MATEUS
Dúvida minha…(desculpa qualquer coisa…=D)
Eu tb estou fazendo um sistema desse… (mais é só para treinar).
Mais no meu Cadastro de Usuário eu não sei como eu armazeno a senha do usuário que ele digita no jPassword no meu banco.
Não da erro nenhum, mais sempre que eu vou ver no meu banco todas as senhas salvas estão com mesmos caracteres.
Sabe como resolvo isso???

mateus.cordeiro

Xandi
Segue minhas classes, eu não sei o porque acontece isso no seu codigo (manda o codigo), porem segue o meu para analisar:

Classe UsuarioDao:
package DAO;
import java.sql.SQLException;
import util.Usuario;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Sergio
 */
public class UsuarioDAO extends GenericDao{
    
    public void salvar(Usuario usuario) throws SQLException {
        String insert = "INSERT INTO usuario(idusuario, nome, senha) VALUES(?,?,?)";
        save(insert, usuario.getIdusuario(), usuario.getNome(), usuario.getSenha());
    }

    public void alterar(Usuario usuario) throws SQLException {
        String update = "UPDATE usuario " +
                "SET nome = ?, senha = ?" +
                "WHERE idusario = ?";
        update(update, usuario.getIdusuario(), usuario.getNome(), usuario.getSenha());
    }

    public void excluir(long id) throws SQLException {
        String delete = "DELETE FROM usuario WHERE idusuario = ?";
        delete(delete, id);
    }

    public List<Usuario> findUsuarios() throws SQLException {
        List<Usuario> usuarios = new ArrayList<Usuario>();

        String select = "SELECT * FROM usuario";

        PreparedStatement stmt = getConnection().prepareStatement(select);
        ResultSet rs = stmt.executeQuery();

        while (rs.next()) {
            Usuario usuario = new Usuario();
            usuario.setIdusuario(rs.getInt("idusuario"));
            usuario.setNome(rs.getString("nome"));
            usuario.setSenha(rs.getString("senha"));
            usuarios.add(usuario);
        }

        rs.close();
        stmt.close();

        return usuarios;
    }

    public Usuario findByName(String nome) throws SQLException {
        String select = "SELECT * FROM usuario WHERE nome = ?";
        Usuario usuario = null;
        PreparedStatement stmt = getConnection().prepareStatement(select);
        stmt.setString(1, nome);
        ResultSet rs = stmt.executeQuery();

        while (rs.next()) {
            usuario = new Usuario();
            usuario.setIdusuario(rs.getInt("idusuario"));
            usuario.setNome(rs.getString("nome"));
            usuario.setSenha(rs.getString("senha"));
        }

        rs.close();
        stmt.close();
        return usuario;
}
}
Classe Cadastro (Apenas o que está no botão Salvar):
private void btnSalvarActionPerformed(java.awt.event.ActionEvent evt) {                                          
         
    if (txtSenha.getText().equalsIgnoreCase(txtConfirmaSenha.getText())){        
            
    UsuarioController cc = new UsuarioController();
    
    int Idusuario = Integer.parseInt(txtIdusuario.getText());
    
        try {
            cc.salvar(Idusuario, txtNome.getText(), txtSenha.getText());
            JOptionPane.showMessageDialog(this, "Contato salvo com sucesso!");
            //clearFields();
            usuarioList = new UsuarioController().listaUsuarios();
        } catch (SQLException e) {
            JOptionPane.showMessageDialog(this, "Nao foi possivel salvar contato!\n" + e.getLocalizedMessage());
        } catch (ParseException e) {
            JOptionPane.showMessageDialog(this, "Data possui formato inválido!\n" + e.getLocalizedMessage());
        }
        clearFieldsenha();
}                                         
    else {
        JOptionPane.showMessageDialog(this, "Senha incorreta");
        clearFieldsenha();
    }

}
mateus.cordeiro

Apena um detalhe, o txtSenha e txtConfirmaSenha eu usei o JPasswordField!

marciobarroso

Sugestão:

Quando se for trabalhar com JDBC como é seu caso, o ideal é que você declare no SQL os campos que deseja recuperar. Assim você evita de transitar entre banco e aplicação informações desnecessárias e também facilita na hora de recuperar os valores do ResultSet.

// Ao invés de fazer assim:
String sql = "select * from t_usuario where login=? and password=?"

// Faça assim:
String sql = "select id from t_usuario where login=? and password=?"

Outra dica interessante seria você criar um arquivo para deixar todas as suas clausulas SQL. Mas como você disse que ainda esta aprendendo, talvez isso seja um mero detalhe que iria te atrapalhar neste momento.

Boa sorte;

mateus.cordeiro

Senhores, Preciso novamente da ajuda de vcs!

Eu preciso que quando o usuario se logue fique em algum lugar o seu ID , para que eu possa usar em outra tela que ele vai ter apenas o botao de "entrada", que deve salvar a hora o dia e o usuario (Id).
Porem estou perdido, ñão sei como fazer isso.

Segue meu frame com o botao que salva:
private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {                                         

    ControleController controle = new ControleController();
    int cod_func = 333;
        try {
            controle.volta(cod_func);
        } catch (SQLException ex) {
            Logger.getLogger(ControleFrame.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ParseException ex) {
            Logger.getLogger(ControleFrame.class.getName()).log(Level.SEVERE, null, ex);
        }
}

A hora e a data eu já consegui com esse metodo:

public class ControleDAO extends GenericDao{
    
    public void entrada(Controle controle) throws SQLException {
        String insert = "INSERT INTO tabcontrole(cod_func, data_cont, entrada) VALUES(?,curdate(),curtime())";
        save(insert, controle.getCod_func());
    }

Conto com uma LUZ! Obrigado

mateus.cordeiro

Bom dia!

Estou pesquisando ainda como resolver esse meu problema.
Falaram para utilizar uma variavel global, mas como eu faço isso no java?
OU utilizo outra coisa, mas o que e como?
Alguém poderia me ajudar!

Obrigado

Eric_SantAnna

É só declarar sua variável como static:

private static String var = null;

public static void setVar(String arg)  {
       var = arg;
}
public static String getVar()    {
       return var;
}
Você seta ela assim:
MinhaClasse.setVar(valor);
E obtém o valor assim:
String dado = MinhaClasse.getVar();

Geralmente quando meu sistema exige muitas variáveis globais eu uso uma classe só pra guardar minhas variáveis static, de forma que eu nunca vou precisar instanciar ela. (Variáveis static, são variáveis que não tem nada a ver com objeto, ou seja, você não precisa dar um "new Classe()" pra pode usar a variável, e mesmo se você criar objetos da sua classe, a variável static vai ter sempre o mesma, independendo de qual objeto da classe eu tenha)

mateus.cordeiro

Eric!
Cara muito obrigado!!! Deu certinho!!!

mapleplayer

Eu já fiz um programa desse quando eu trabalhava, mas o que eu fiz era web-based, bastava o trabalhador ter um navegador, logar no aplicativo e fazer o check-in.
Era fácil.

X

Mateus Cordeiro
Vlw, vou olhar aqui o código e tentar consertar…
ps: não respondi antes porque tava sem net (quase não sobrevivo… rsrsrsrs)

mateus.cordeiro

Senhores, novamente estou com um problema!

No sistema que estou desenvolvendo, tenho uma tela de Cadastro de Usuario.
O botão salvar funciona sem problemas, já o botao alterar(update), já vi, revi e não acho o erro.
Quem puder ajudar!

Segue o codigo:

classe UsuarioDAO:
public class UsuarioDAO extends GenericDao{
    
    ...

    public void alterar(Usuario usuario) throws SQLException {
        String update = "UPDATE usuario " +
                "SET nome = ?, senha = ?, nome_complero = ?, cod_ped = ?" +
                "WHERE idusuario = ?";
        update(update, usuario.getNome(), usuario.getSenha(), usuario.getNomeCompleto(), usuario.getCodDep(),usuario.getIdusuario());
    }
   ...
}
classe GenericDao:
public abstract class GenericDao {
...
protected void update(String updateSql, Object id, Object... parametros) throws SQLException {
	PreparedStatement pstmt = getConnection().prepareStatement(updateSql);
	for (int i = 0; i < parametros.length; i++) {
                pstmt.setObject(i+1, parametros[i]);
	}
	pstmt.setObject(parametros.length + 1, id);
	pstmt.execute();
	pstmt.close();
    }
...
}
UsuarioController:
public class UsuarioController {
    
    public void alterar(String nome, String senha, String nomeCompleto, int codDep, int idusuario) throws ParseException, SQLException {
        Usuario usuario = new Usuario();
        usuario.setNome(nome);
        usuario.setSenha(senha);
        usuario.setIdusuario(idusuario);
        usuario.setNomeCompleto(nomeCompleto);
        usuario.setCodDep(codDep);
        new UsuarioDAO().alterar(usuario);
    }
...
}
Codigo do botão alterar:
ValidarLogin vl = new ValidarLogin();
    UsuarioController uc = new UsuarioController();
    
    int Idusuario = Integer.parseInt(txtIdusuario.getText());
        try {
            if (vl.verificaUsuario(Idusuario) != null && (!"".equals(txtSenha.getText()) && txtSenha.getText().equalsIgnoreCase(txtConfirmaSenha.getText()))){
                System.out.println("Usuario Existe");
                        try {
                            uc.alterar(txtNome.getText(), txtSenha.getText(), txtNomeCompleto.getText(),cbDep.getSelectedIndex(),Idusuario);
                            JOptionPane.showMessageDialog(this, "Usuario ALTERADO com sucesso!");
                            System.out.println("Alterando");
                        } catch (ParseException ex) {
                            Logger.getLogger(CadastroUsuario.class.getName()).log(Level.SEVERE, null, ex);
                        }

        } catch (SQLException ex) {
            Logger.getLogger(CadastroUsuario.class.getName()).log(Level.SEVERE, null, ex);
        }
}
mateus.cordeiro

Segue o erro:

Conectando ao Banco de Dados Usuario Existe Conectando ao Banco de Dados 14/10/2011 15:21:35 telas.CadastroUsuario btnAlterarActionPerformed GRAVE: null com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'idusuario = '321323'' at line 1 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) at com.mysql.jdbc.Util.getInstance(Util.java:386) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1052) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3597) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3529) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1990) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2151) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2625) at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2119) at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1362) at DAO.GenericDao.update(GenericDao.java:40) at DAO.UsuarioDAO.alterar(UsuarioDAO.java:30) at Controller.UsuarioController.alterar(UsuarioController.java:46) at telas.CadastroUsuario.btnAlterarActionPerformed(CadastroUsuario.java:291) at telas.CadastroUsuario.access$700(CadastroUsuario.java:30) at telas.CadastroUsuario$8.actionPerformed(CadastroUsuario.java:123) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) at java.awt.Component.processMouseEvent(Component.java:6288) at javax.swing.JComponent.processMouseEvent(JComponent.java:3267) at java.awt.Component.processEvent(Component.java:6053) at java.awt.Container.processEvent(Container.java:2041) at java.awt.Component.dispatchEventImpl(Component.java:4651) at java.awt.Container.dispatchEventImpl(Container.java:2099) at java.awt.Component.dispatchEvent(Component.java:4481) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168) at java.awt.Container.dispatchEventImpl(Container.java:2085) at java.awt.Window.dispatchEventImpl(Window.java:2478) at java.awt.Component.dispatchEvent(Component.java:4481) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:643) at java.awt.EventQueue.access$000(EventQueue.java:84) at java.awt.EventQueue$1.run(EventQueue.java:602) at java.awt.EventQueue$1.run(EventQueue.java:600) at java.security.AccessController.doPrivileged(Native Method) at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98) at java.awt.EventQueue$2.run(EventQueue.java:616) at java.awt.EventQueue$2.run(EventQueue.java:614) at java.security.AccessController.doPrivileged(Native Method) at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) at java.awt.EventQueue.dispatchEvent(EventQueue.java:613) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

esse erro: “at DAO.GenericDao.update(GenericDao.java:40)” aponta para pstmt.execute(); da classe GenericDao

C

A sua variável Idusuario da classe Usuario é de que tipo? E no banco de dados a coluna Idusuario é de que tipo?

mateus.cordeiro
Estão como int mesmo. No banco esta INT(10) e na classe Usuario:
public class Usuario {
    
    private int Idusuario;
...
public int getIdusuario() {
        return Idusuario;
    }

    public void setIdusuario(int Idusuario) {
        this.Idusuario = Idusuario;
    }
...
}
mateus.cordeiro

Mais alguma sugestão?
Obrigado

nel

Oi,

1 - substitua o execute() por executeUpdate().

2 - confirme que os tipos passados correspondem aos do banco de dados, em todos os casos.

3 - Imprima o SQL update, me dá a impressão que está mal formado, veja:

String update = "UPDATE usuario " + "SET nome = ?, senha = ?, nome_complero = ?, cod_ped = ?" + "WHERE idusuario = ?";

Me parece que pode imprimir algo assim: “UPDATE usuario SET nome = “joao”, senha = 1234, nome_completo = joao da silva, cod_ped = 10WHERE idusuario = 10”;
Percebeu que o WHERE está “grudado” no valor do cod_ped ? É essa a minha impressão. Use o StringBuffer para concatenação, algo como:

StringBuffer sql = new StringBuffer(); sql.append("UPDATE usuario SET "); sql.append("nome = ?, senha = ?, nome_completo = ? "); sql.append("cod_ped = ? WHERE idusuario = ?"); String update = sql.toString();

Abraços.

Dan_xD

De uma olhada direito no seu método que realiza o Alterar.

A SQL que você passou está errada, por isso está gerando o erro.

Observe que o log aponta para: ‘idusuario = ‘321323’’

O certo seria um: idusuario = ‘321323’

Observe que isso seria a SQL que está sendo passada.

mateus.cordeiro

Nel,
Cara vc está certo!
O SQL estava grudado ?", transformando em cod_dep = 10WHERE.
Foi só dar o espaço ficando assim:

"SET nome = ?, senha = ?, nome_completo = ?, cod_dep = ?  " +

Muito obrigado!

Dan xD
Obrigado pela prontidão!

nel

mateus.cordeiro:
Nel,
Cara vc está certo!
O SQL estava grudado ?", transformando em cod_dep = 10WHERE.
Foi só dar o espaço ficando assim:

"SET nome = ?, senha = ?, nome_completo = ?, cod_dep = ?  " +

Muito obrigado!

Dan xD
Obrigado pela prontidão!

Que bom :slight_smile:
Procure usar o StringBuffer ou StringBuilder quando for concatenar String e no caso dos SQL fique atento aos espaços. É “comum” isso acontecer.
Sobre o seu tópico, seria adequado você edita-lo e adicionar ao fim [Resolvido].

Forte abraço e sucesso amigo!

mateus.cordeiro

A TODOS que me ajudaram um muitooooo obrigado!
Gostaria de disponibilizar esse projeto, compartilhar com todos principalmente quem ta começando agora!

PORQUE ESSE PROJETO NÃO É MEU, E SIM É NOSSO (a todos do grupo - GUJ)!

Como faço isso? onde posso colocar todos os detalhes do projeto!?!

Criado 11 de outubro de 2011
Ultima resposta 17 de out. de 2011
Respostas 22
Participantes 9