Ir para conteúdo

[Tutorial] Auto close com BD (JAVA)


Laravel 8 em Pessoa

Posts Recomendados

Muito de vocês que estão aprendendo a mexer com java principalmente com a Bukkit API, costumam usar o sql para conectar no banco de dados e não o fecham porque nos vídeos não costumam explicar, portanto estou fazendo este tópico de como fazer um autoclose.

 

Exemplo de seleccionar todos os valores com auto close

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;

try (Connection connection = suaConexao) {
	try (ResultSet rs = connection.createStatement().executeQuery("SELECT * FROM `suatabela`")) {
		while (rs.next()) {
			//O que quiser fazer
		}
	}
} catch (SQLException e) {
	e.printStackTrace();
}

Ao colocar entre "()" vai fazer um auto close.

Aconselho também a fazer as conexões em async (dependendo sempre do caso)

Link para o comentário
Compartilhar em outros sites

1 hora atrás, Striker disse:

Bom tópico, mas até agora não entendi aonde o "()" fecha e seria ótimo explicar como fecha manualmente também, fora isso muito bom!

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
try {
    Connection connection = suaConexao;
	try (ResultSet rs = connection.createStatement().executeQuery("SELECT * FROM `suatabela`")) {
		while (rs.next()) {
			//O que quiser fazer
		}
	}
  
  connection.close();
} catch (SQLException e) {
	e.printStackTrace();
}

assim

Link para o comentário
Compartilhar em outros sites

Em 12/01/2022 em 08:44, Jhonatas48 disse:

bom já utilizei esse método e já apresentou problemas então utilizo de uma forma diferente eu fecho a conexão manual

Fazer manual nunca é bom, o auto close tem uma série de sequências pra caso der erro ele fechar. Se tiver fechando manual e não tratar igual o auto-close trata a conexão simplesmente vai continuar aberta consumindo recursos da máquina.

@Topic
Outro ponto importante é que o autoclose não é somente para conexões para banco de dados, mas sim para qualquer coisa que implemente o Closeable, como os Readers, Writters etc. 

Link para o comentário
Compartilhar em outros sites

12 horas atrás, SrBlecaute disse:

Fazer manual nunca é bom, o auto close tem uma série de sequências pra caso der erro ele fechar. Se tiver fechando manual e não tratar igual o auto-close trata a conexão simplesmente vai continuar aberta consumindo recursos da máquina.

@Topic
Outro ponto importante é que o autoclose não é somente para conexões para banco de dados, mas sim para qualquer coisa que implemente o Closeable, como os Readers, Writters etc. 

Já vai ser tratado a exceção.E a conexão só não é fechada se for inexistente.

Mas sempre utilizo um método próprio para fechar conexão que faz várias checagem antes de fechar a conexão.

Já vi vários plugins dando erro na conexão do banco de dados por usar o exemplo citado por vocês

Link para o comentário
Compartilhar em outros sites

1 hora atrás, Jhonatas48 disse:

Já vai ser tratado a exceção.E a conexão só não é fechada se for inexistente.

Mas sempre utilizo um método próprio para fechar conexão que faz várias checagem antes de fechar a conexão.

Já vi vários plugins dando erro na conexão do banco de dados por usar o exemplo citado por vocês

De certeza que não foi por isso 🤪

Link para o comentário
Compartilhar em outros sites

Em 14/01/2022 em 09:54, 1109 disse:

De certeza que não foi por isso 🤪

Cara igual disse não falei que a forma que ele fez está errado e muito menos estou criticando ele Se nunca aconteceu de um plugin fazer isso com você ótimo mas tive vários problemas de vários de desenvolvedores de plugin apresentar erro na conexão com o teu catch e até atingindo o limite de conexão do banco de dados.

Enfim cada um utiliza do jeito que quiser.

Link para o comentário
Compartilhar em outros sites

41 minutos atrás, Jhonatas48 disse:

Cara igual disse não falei que a forma que ele fez está errado e muito menos estou criticando ele Se nunca aconteceu de um plugin fazer isso com você ótimo mas tive vários problemas de vários de desenvolvedores de plugin apresentar erro na conexão com o teu catch e até atingindo o limite de conexão do banco de dados.

Enfim cada um utiliza do jeito que quiser.

volto a  dizer

De certeza que não foi por isso 🤪

Link para o comentário
Compartilhar em outros sites

5 horas atrás, Jhonatas48 disse:

Cara se você acha que sabe muito esperto.Então me dá um exemplo então e me de algo concreto em vez de só teoria

Apenas você  ta dizendo algo estúpido e não aceita. Tome seu exemplo: https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html

Link para o comentário
Compartilhar em outros sites

20 horas atrás, 1109 disse:

Apenas você  ta dizendo algo estúpido e não aceita. Tome seu exemplo: https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html

Deixa te perguntar nao me entenda como ignorante ou algo assim.Mas você já desenvolveu algum plugin ou algum sistema em Java para usar banco de dados com várias conexões simultâneas com isso?

Se sim pode me falar como fez e o que fez ?

 

Em nenhuma das minhas respostas não estou aceitando estou criticando a sua opinião de ficar menosprezando as pessoas 

Link para o comentário
Compartilhar em outros sites

Olá, eu fiquei um pouco curioso com oque vocês estão falando, e estou desenvolvendo alguns plugins e gostaria de otimiza-los, percebi que vocês podem me ajudar...

 image.png.eb86e41e109a0469357847e6e17df3f3.png

 

Aqui eu abro uma conexão sqlite e só fecho ela na hora de desliga o servidor, 

image.png.3373be6292e89f86404d124bb3cbadc3.png

 

aqui meu método de fechar a conexão (só realizo quando desligo o plugin).

E todos os dados do banco de dados eu coloco num cache e trato como objeto, apenas na hora de desligar o plugin eu realizo o save no sqlite, que é esse método aqui

image.png.740b9fc7a8b91404bd856950a17ae909.png

 

oque eu gostaria de saber é se, oque vocês tão dizendo é que, se eu não realizar o ultimo STM.CLOSE(); poderá causar um lag ao servidor, ou eu posso deixar dessa forma? (TRATO COMO O OBJETO E SALVO QUANDO O PLUGIN TÁ DESLIGANDO PARA EVITAR FICAR FAZENDO VARIOS PEDIDOS AO BANCO DE DADOS), desde já agradeço a todos pela discussão e qualquer ajudaria cairia bem. 

Link para o comentário
Compartilhar em outros sites

Em 17/01/2022 em 16:01, NSG disse:

Olá, eu fiquei um pouco curioso com oque vocês estão falando, e estou desenvolvendo alguns plugins e gostaria de otimiza-los, percebi que vocês podem me ajudar...

 image.png.eb86e41e109a0469357847e6e17df3f3.png

 

Aqui eu abro uma conexão sqlite e só fecho ela na hora de desliga o servidor, 

image.png.3373be6292e89f86404d124bb3cbadc3.png

 

aqui meu método de fechar a conexão (só realizo quando desligo o plugin).

E todos os dados do banco de dados eu coloco num cache e trato como objeto, apenas na hora de desligar o plugin eu realizo o save no sqlite, que é esse método aqui

image.png.740b9fc7a8b91404bd856950a17ae909.png

 

oque eu gostaria de saber é se, oque vocês tão dizendo é que, se eu não realizar o ultimo STM.CLOSE(); poderá causar um lag ao servidor, ou eu posso deixar dessa forma? (TRATO COMO O OBJETO E SALVO QUANDO O PLUGIN TÁ DESLIGANDO PARA EVITAR FICAR FAZENDO VARIOS PEDIDOS AO BANCO DE DADOS), desde já agradeço a todos pela discussão e qualquer ajudaria cairia bem. 

Bom eu já fiz diversos plugins uma coisa vou te dar certeza se não fechar a conexão depois que não vai usar mais se não fechar ela poderá estourar o limite do banco de dados e impedir de novas consultas,inserções ,updates e deleção ocorra.

Pois e isso é em todo sistema de abrir uma conexão depois de usar tem de fechar

Link para o comentário
Compartilhar em outros sites

Participe da Conversa

Você pode postar agora e se cadastrar mais tarde. Se você tiver uma conta, a class='ipsType_brandedLink' href='https://gamersboard.com.br/login/' data-ipsDialog data-ipsDialog-size='medium' data-ipsDialog-title='Sign In Now'>acesse agora para postar com sua conta.
Observação: sua postagem exigirá aprovação do moderador antes de ficar visível.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.

Processando...
×
×
  • Criar Novo...