[RESOLVIDO] Porque o null nessa ocasiao?

Estou aprendendo conectar o java ao banco de dados mysql entao ando vendo alguns videos e conseguir conectar sem muitos problemas mas agora quero entender cada linha do codigo que fiz (com muita ajuda) e nesse codigo abaixo eu nao consigo entender o null pois esse metodo precisa retornar uma conexao e eu ja faco isso no Try, retornar null logo apos retornar a conexao nao fecharia a conexao? ou poderia ocasionar algum problema la na frente caso eu precisasse do retorno de conn?

image

assim faria mais sentido pra mim pois eu retorno conn independente do que acontecer pois se der erro entao conn retorna false mas se der sucesso ele retorna true porem…

como podem ver o eclipse nao deixa… fico grato desde ja com a ajuda de voces, estou me esforcando pra aprender cada dia mais ^_^.

Olá @20cortar, tudo certo?

No java e em outras linguagens, quando o comando return é executado, o método é encerrado na hora.

No seu caso, se o bloco try estiver correto, ele irá retornar conn, e como eu disse antes, quando o return é executado, o método se encerra, em outras palavras nada mais no método é executado.

Em relação a sua print, voce não consegue retornar conn fora do try pq conn foi definido dentro do bloco try e isso faz com que ele não seja enxergado fora dele

1 curtida

entendi… entao na primeira imagem com os dois returns basicamente estou dizendo q se der certo ele retorna a conexao true mas se nao ele entra no catch e retorna a conexao nula, ou seja false, esplendido Mike!!

sobre o seu segundo comentario eu nao entendi muito bem pois na segunda print o primeiro “return conn” esta comentado ou seja no codigo so tem apenas um return no final, pra mim essa segunda imagem ainda me faz sentindo porque se der sucesso ele entra no try, pula o catch e retorna a conexao true mas se der falha ele entra no try, passa por dentro do catch tratando o erro e retorna a conexao false, poderia me explicar melhor sobre o segundo comentario?

obrigado desde ja.

Nesse caso o que está te confundindo é o escopo da variável. A sua variável conn só existe dentro do escopo do seu bloco try/catch.

Tudo o que for definido ali deixa de existir assim que a execução do bloco termina. Portanto no momento do seu return, a variável conn não existe mais

Você tem 3 opções no caso:

Connection conn = null; // Definição da variável fora do bloco try/catch, ela existe mesmo não tendo uma conexão ainda
try {
    // ... sua lógica
    conn = DriverManager.getConnection(url, username, password);
    // resto da sua lógica
} catch (SQLException e) {
    // lógica do seu bloco try
}
return conn; // retornando a variável que foi declarada acima
try {
    // ... sua lógica
    Connection conn = DriverManager.getConnection(url, username, password);
    // resto da sua lógica
    return conn;
} catch (SQLException e) {
    // lógica do seu bloco try
    return null; // retornando null dentro do bloco catch
}
try {
    // ... sua lógica
    Connection conn = DriverManager.getConnection(url, username, password);
    // resto da sua lógica
    return conn;
} catch (SQLException e) {
    // lógica do seu bloco try
}
return null;
1 curtida

kkkkkk voces sao Deuses da programacao, fico imensamente grato com essa aula que nem meu professor foi capaz de dar, nao faz ideia do quanto voce me ajudou, vou seguir em frente! obrigadao Rodrigo!.