GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Dificuldade de inserir informações no banco


#21

poe os print na DAO


#22

Você não tem uma variavel chamada url na sua classe de conexão?
Depois de tudo insere o texto que passei. URL fica ± assim:

public final class Conexao {
	
	private static Connection con;
	
	private final static String USUARIO = "teste";
	private final static String SENHA = "123";
	private final static String URL = "jdbc:mysql://localhost/testes?useSSL=false&logger=com.mysql.jdbc.log.StandardLogger&profileSQL=true";
	
	private Conexao(){}
	
	public static Connection getCon(){
		if(con == null)	{
			try {
				Class.forName("com.mysql.jdbc.Driver");
				
				con = (Connection) DriverManager.getConnection(URL, USUARIO, SENHA);
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}			
		}		
		return con;
	}
}

#23

Segue minha classe de conexão

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import lib.Util;

public class Conn {
    
    private static Conn instance;
    private static Connection conn = null;
/**
 * Método de conexão com banco e tem como retorno um Boolean
 * @return 
 */ public static Boolean getConnection() {
        try {
            if (conn == null||conn.isClosed()) {
                conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/servadm", "root", "root");
            }
        } catch (Exception e) {
            Util.mensagem("Erro ao conectar: " + e.getMessage());
            return false;
        }
        return true;
    }
/**
 * Método público estático de acesso único ao objeto!
 * Sintaxe: Conn con = Conn.getInstance();
 * @return 
 */ public static Conn getInstance() {
        if (instance == null) {
            instance = new Conn();
        }
        return instance;
    }
/**
 * Recupera conexão
 * @return Connection
 */ public static Connection getConn() {
        return conn;
    }
/**
 * Encerra conexão
 */ public static void closeConnection (){
        try {
            if(!conn.isClosed()&&conn!=null){
                conn.close();
            }
        } catch (SQLException ex){
            Util.mensagem("Erro ao encerrar conexão: "+ex.getMessage());
        }
    } 
}

Eu uso o método getConnection apenas quando faço Login no sistema. Repare que ele me retorna um boolean.

Em todas as minha classes DAO eu tenho um método chamado Acao que faz o CRUD

public class ServDao {
    
    private static ResultSet rs = null;
    private static PreparedStatement ps = null;

    public static Msg Acao (ServMod obj){
     // Criticas
        //if (obj.getCodigo()==0) {return new Msg(0, "Campo obrigatório: Código");}
        if (obj.getDescr().equals("")) {return new Msg(1, "Campo obrigatório: Descrição");}
        if (obj.getSegmento().equals("")) {return new Msg(2, "Campo obrigatório: Segmento");}
     // Ação
        try {
            switch(obj.getAcao()) {
                case "INC":
                    ps = Conn.getConn().prepareStatement("insert into aux_servico values (null, ?, ?, ?, ?)");
                    ps.setString (1,obj.getDescr   ());
                    ps.setString (2,obj.getSegmento());
                    ps.setBoolean(3,obj.isAtivo    ());
                    ps.setString (4,obj.getTempo   ());
                    ps.executeUpdate();
                    Util.mensagem(obj.getAcao(), (char) ps.getUpdateCount());
                    break;
                case "ALT":
                    ps = Conn.getConn().prepareStatement("update aux_servico     "
                                                       + "   set descr    = ? "
                                                       + "     , segmento = ? "
                                                       + "     , ativo    = ? "
                                                       + "     , tempo    = ? "
                                                       + " where codserv  = ? ");
                    ps.setString (1,obj.getDescr   ());
                    ps.setString (2,obj.getSegmento());
                    ps.setBoolean(3,obj.isAtivo    ());
                    ps.setString (4,obj.getTempo   ());
                    ps.setInt    (5,obj.getCodigo  ());
                    ps.executeUpdate();
                    Util.mensagem(obj.getAcao(), (char) ps.getUpdateCount());
                    break;
                case "EXC":
                    ps = Conn.getConn().prepareStatement("delete from aux_servico "
                                                       + " where codserv = ?");
                    ps.setInt(1,obj.getCodigo());
                    ps.executeUpdate();
                    Util.mensagem(obj.getAcao(), (char) ps.getUpdateCount());
                    break;
            }
        } catch (Exception e) {
            Util.mensagem((e.getMessage().contains("foreign key constraint") ? "ForeignKey":null), e.getMessage());
        } finally {
            Conn.closeConnection(ps);
        }
        return new Msg(0, null);
    }
}

Repare que eu chamo o método getConn da classe Conn que me retorna o Connection. Assim não preciso ficar abrindo e fechando conexão o tempo todo … Só fecho a conexão quando encerro a aplicação.

Repare que no começo do método Acao eu faço umas verificações justamente para saber se estou passando os dados corretamente antes de gravar na tabela. Msg é uma classe que tem apenas código e descrição que eu trato como mensagem e para saber qual campo esta com erro no return.


#24

Fiz como você disse, e o retorno foi “null”. Então deve ser por isso não está indo nada pro banco.


#25

Entendi, muito obrigado! Irei tentar usar alguma ideia sua na minha aplicação.


#26

Usei o logger e não retornou erro de banco, acho que o erro está no meu DAO mesmo. Mas de qualquer forma, obrigado! :smiley:


#27

Sim, pois o ID entra automaticamente(se tiver setado como auto_increment), então nem precisa passar ele.