Erro SP com muitos registros

9 respostas
L

Pessoal, boa tarde!

Tenho uma rotina, q efetua baixa em diversos titulos, para facilitar o processo criei uma Stored Procedure, que eu chamo uma única vez.
Esta Stored Procedure faz a leitura de uma tabela que crio no inicio do processo, alimento, e depois de utilizar eu dou um drop nela, ou seja, é como se fosse uma “temporaria”, o processo em geral é bem simples, leio os dados, e dou insert ou update de acordo com a situação.

Todo este processo funciona sem problemas qdo baixo, 200, 300 títulos de uma única vez, porém acima disso ele perde a conexão com banco apresentando a seguinte mensagem:

Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.

Alguém sabe o pq isso pode ocorrer?
Utilizo o driver mysql-connector-java-5.1.7-bin.jar

QQ ajuda é muito benvinda.

Grato.

9 Respostas

viniciusfaleiro

Muito estranho!! se vc ficar pingando o servidor enquanto ele faz esse processamento a rede responde normalmente? O banco não está na mesma máquina provalmente né?

L

Olá Vinicius…

Sim, responde normalmente…isso q é estranho.
Utilizo um servidor onde fica instalado o MySQL 5.

Enfim, obrigado pela atenção…

viniciusfaleiro

Como vc está estabelecendo conexão? Usa algum framework ou JDBC comum?

viniciusfaleiro

Acredito que o processamento deva realmente estar estourando o tempo de timeout… porém, já tentou isso:

jdbc:mysql://seuhost:3306/suabase?autoReconnect=true

Ele retomará a conexão automáticamente [na teoria, pq com coletores de dados não funcionou comigo]

Testa ai e fala =)…

L

Então, agora ele reconectou, porém mesmo assim, deu outro erro…rs


Could not create connection to database server. Attempted reconnect 3 times. Giving up.

Tem alguma sugestão?..

Obrigado.

viniciusfaleiro

Por favor, posta seu código… com o máximo possível de informação…

L
viniciusfaleiro:
Por favor, posta seu código.. com o máximo possível de informação..

Segue o código mostrando onde eu insiro os dados na "temporária", e logo em seguida chamo a SP.
Mas é depois de chamar a SP, de uns 40 segundos é q o erro ocorre...

if (tela.conn.getKindDb().equalsIgnoreCase("mysql") && comSP){
				System.out.println("inicio SP ="+MercoFlex.getBase().getTransform().dtocHora(BaseLib.getTransform().getDate()));
				
				StringBuilder dadosInserir = new StringBuilder("");
				for(int i=0; i<tela.tblTitulos.getRowCount(); i++){
					if ((Boolean)tela.tblTitulos.getModel().getValueAt(i, 0)) {
						tela.daoTit.absolute(i+1);	
						
						//aqui comeca para a
						tela.daoContrec.selectWhere("id="+ tela.daoTit.getLong("id")); 
						if(tela.daoTit.getBigDecimal("pendente").compareTo(tela.daoContrec.getBigDecimal("valor")) <=0){
							atuSaldo.atualizaSaldo(MercoFlex.getBase().getTransform().multiplicacao(tela.daoTit.getBigDecimal("pendente"), new                                                                                BigDecimal(-1),2), tela.daoContrec.getLong("cdcliente"), tela.daoContrec.getInt("cartao"));
						}else{
							atuSaldo.atualizaSaldo(MercoFlex.getBase().getTransform().multiplicacao(tela.daoContrec.getBigDecimal("valor"), new                                                                                BigDecimal(-1),2), tela.daoContrec.getLong("cdcliente"), tela.daoContrec.getInt("cartao"));
						}
						
						if(dadosInserir.toString().trim().length() > 0){
							dadosInserir.append(",\n");
						}
						dadosInserir.append("("+ tela.daoTit.getLong("id")+", "                        // idcontrec
								       + MercoFlex.getBase().getTransform().arredonda(tela.daoTit.getBigDecimal("pendente"),2)+"," 
								       + tela.daoTit.getInt("atraso")+","		               
								       + MercoFlex.getBase().getTransform().arredonda(tela.daoTit.getBigDecimal("juros"),2)+","	    
								       + MercoFlex.getBase().getTransform().getValorDataHoraSqls(MercoFlex.getBase().getTransform().getDate(), 										"d")  +","
								       + "'" + MercoFlex.getBase().getRb().getString("jurosDeTitulo").toUpperCase()+"'," //Obs juros
								       + "'" + tela.daoTit.getString("nrdocto")+"',"           // nrdoctorec
								       + "'" + MercoFlex.getBase().getTransform().padRight(BaseLib.daoUsuario.getString("usuario"),14," ")+"',"   
							               + "'" + (MercoFlex.getBase().getTransform().padRight(BaseLib.daoUsuario.getString("usuario"),14," ") + 	
						                       MercoFlex.getBase().getTransform().dtoc(MercoFlex.getBase().getTransform().getDate()) + " " +                                                               MercoFlex.getBase().getTransform().dtocHora((GregorianCalendar)MercoFlex.getBase().getTransform().getDate())).substring(0, 30)+"',"
								      + BaseLib.daoUsuario.getInt("loja")+")");             // lojarec					
					}
					tela.daoTit.next();
				}
							
				DaoTable daoTmpBaixa = new DaoTable(tela.conn);
				if (daoTmpBaixa.execSQL(GetSql.getInstance(tela.conn.getKindDb()).getApagaTabTemp())){
					if (daoTmpBaixa.execSQL(GetSql.getInstance(tela.conn.getKindDb()).getCriaTabelaTemporaria())){
						daoTmpBaixa.execSQL(GetSql.getInstance(tela.conn.getKindDb()).getInsereDadosTabelaTemporaria(dadosInserir));
						daoTmpBaixa.execSQL(GetSql.getInstance(tela.conn.getKindDb()).getChamaSP()); // CHAMADA DA STORED PROCEDURE
					}
				}
				daoTmpBaixa.release();
				System.out.println("Fim SP ="+MercoFlex.getBase().getTransform().dtocHora(BaseLib.getTransform().getDate()));
				
			}
[size=12] [/size]

QQ ajuda é benvinda.

Grato!

viniciusfaleiro

No seu DAO vc abre uma conexão pra cada solicitação e fecha ou ta usando Singleton?

L

Eu abro a conexão ao entrar na tela, e fecho ao sair.

Criado 15 de fevereiro de 2010
Ultima resposta 15 de fev. de 2010
Respostas 9
Participantes 2