poe os print na DAO
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;
}
}
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.
Fiz como você disse, e o retorno foi “null”. Então deve ser por isso não está indo nada pro banco.
Entendi, muito obrigado! Irei tentar usar alguma ideia sua na minha aplicação.
Usei o logger e não retornou erro de banco, acho que o erro está no meu DAO mesmo. Mas de qualquer forma, obrigado!
Sim, pois o ID entra automaticamente(se tiver setado como auto_increment), então nem precisa passar ele.