Dúvida de fechamento de conexões e utilização do PreparedStatement!

3 respostas
paulinhohd

Olá Javeiros, olha eu aqui novamente rs...

Por favor, deem uma analisada no código abaixo e vejam se estou fazendo coisa errada ou pode ser assim:

Conexao con = new Conexao();

PreparedStatement psSQL = con.conConect.prepareStatement("SELECT 
A1_COD FROM A1 WHERE A1_COD = '"+ strCodCli +"'");

	ResultSet Resultados = psSQL.executeQuery();
	if (Resultados.next())
{
 strCodPes = Resultados.getString(1);
}
											  	  
if(strCodPes != null)
{
JOptionPane.showMessageDialog(null,"Código já cadastrado!");
											  		
jtfCodCli.setText("");
											  		
jtfCodCli.grabFocus();
											  		
jtfCodCli.setText(""); jtfNomCli.setText("");
												  	
jtfFanCli.setText(""); jtfFisJur.setText("");
												  	
jtfTipCli.setText(""); jtfEndCli.setText("");
												  	
jtfMunCli.setText(""); jtfEstCli.setText("");
												  	
jtfBaiCli.setText(""); jtfCEPCli.setText("");
												  	
jtfTelCli.setText(""); jtfCPFCli.setText("");
												  	
jtfInsCli.setText(""); jtfRGCli.setText("");
												  	
jtfConCli.setText(""); jtfFunCli.setText(""); 
												  	
jtfEmaCli.setText("");
											  		
panCadCli.setVisible(true);
}
else
{
psSQL = con.conConect.prepareStatement("INSERT INTO A1 
VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
											  		
psSQL.setString(1,strCodCli);  psSQL.setString(2,strNomCli);
											  		
psSQL.setString(3,strFanCli);  psSQL.setString(4,strFisJur);
											  		
psSQL.setString(5,strTipCli);  psSQL.setString(6,strEndCli);
											  		
psSQL.setString(7,strMunCli);  psSQL.setString(8,strEstCli);
											  		
psSQL.setString(9,strBaiCli);  psSQL.setString(10,strCEPCli);
											  		
psSQL.setString(11,strTelCli); psSQL.setString(12,strCPFCli);
											  		
psSQL.setString(13,strInsCli); psSQL.setString(14,strRGCli);
											  		
psSQL.setString(15,strConCli); psSQL.setString(16,strFunCli);
											  		
psSQL.setString(17,strEmaCli); psSQL.executeUpdate();
											  		
Resultados.close();
											  		
psSQL.close();
											  		
JOptionPane.showMessageDialog(null,"CADASTRO EFETUADO COM 
SUCESSO!");
											  		
trePriArv.setSelectionRow(1);
													
panCadCli.setVisible(false);
											  	
}

Eu utilizo a variável psSQL para realizar a primeira consluta e logo em seguida realizo um INSERT utilizando essa mesma variável (psSQL),
1- É correto isso?
2- Estou fechando as conexões corretamente?

Valeu! 8)

3 Respostas

ramos

Algumas sugestões:

  1. Você pode fechar Resultados logo abaixo do primeiro if porque você não usa mais ele depois.
  2. O mesmo vale para o psSQL porque quando você usa ele pela segunda vez já está criando outra instância e precisa fechar a anterior. Portanto, feche ele após o primeiro if também.
  3. Continue executando o ps.Close que tem no final do programa porque ele está fechando corretamente a segunda instância após o uso.

Uma pergunta: o código que você mandou está funcionando?

paulinhohd

Sim, falta um trecho acima que é onde pego os valores dos JTextFields, pq?

Valeu pelas sugestões! 8)

pcalcado

Por favor, quando colar o código, tente quebrar
as linhas grandes para não exceder o tamanho da tela :wink:

Criado 5 de julho de 2005
Ultima resposta 5 de jul. de 2005
Respostas 3
Participantes 3