Update em massa de dados de tamanho desconhecido

2 respostas
cristiano.oliveira

Galera, embora seja novo por aki, gosto bastante da comunidade de vcs.
Sempre que surge alguma duvida recorro a consultas por aki. Mas dessa vez o problema está complicado.

Estou desenvolvendo um programa no eclipse e para isso estou utilizando o Mysql como banco de dados.

O meu programa tem uma classe que realiza uma atualização períodica.
Ele lê uma tabela no banco e com base na data verifica se é necessário ou nao realizar um update de categoria naquele registro.

A quantidade de registros e desconhecida. Portanto coloquei um contador que verifica quantos registro tem no banco e vai lendo de um em um até que todos sejam lidos.

ja coloquei um display para verificar e ele consegue ler sim todos os registros do banco.

O meu problema esta no update.
Quando ele encontra um cara que seja necessário alterar, ele calcula um novo valor e insere no banco. Ate ai tudo bem.
Mas ai o programa para. ele não continua lendo.

Se o primeiro update necessario for no registro de cod 10. ele lê somente os 10 registros e altera o 10. Mas para ai.
Se for no 20 a mesma coisa.

Ele lê ate encontrar o primeiro update. Realiza ele e para.
Parece que o update esta cancelando o looping.

Alguem pode me ajudar? Tem algum comando que preciso colocar para o update?
Ja nao sei mais o que pode ser.

Estou colocando o codigo.

sql = “SELECT max(cod) QTD FROM sisb”;

rs = stmt.executeQuery(sql);

sql = “”;
rs.next();

n=0;			

n = rs.getInt(QTD);

JOptionPane.showMessageDialog(null,"numero de registros: "+n );

for (int i =1; i <=n; i++){

sql = "select ident, codCatego, categoria, dat from sisb where cod = '"+i+"'";
rs = stmt.executeQuery(sql);
sql = "";
			
while (rs.next()){
			
                id = rs.getString("ident");
                ccat= Integer.parseInt(rs.getString("codCatego"));
	cat = rs.getString("categoria");
	dn = rs.getString("dat");
				
	System.out.println(" ");					
				
	if (!cat.equals("Vc") && !cat.equals("B")){
					
	              System.out.println(id+" "+ccat+" "+cat+" "+dn);						
	              System.out.println("É Diferente de b ou vc!");
					
	               a = Calcular_update(dn);
	               System.out.println("Valor do calculo de data: "+a);

	                if (ccat == 1){					
	                                 if (a == 1){
		        	              msg = ("BM");			        				    				    				
		                 }
		                 if (a == 2){    				
			               msg = ("No");			    					    	 }
		                 if (a == 3){    				
			                msg = ("B");	
		                 }
	                }   
	                else {
		            if (a == 1){
		         	              msg = ("BF");	
		            }
		             if (a == 2 || a == 3){    				
			              msg = ("Novilha");		
		             }
	                }     
	                 System.out.println("Categoria nova: "+msg);
					
	                if (!cat.equals(msg)){
		                 System.out.println("Categorias diferentes");
		                 sql = "update sisb set categoria = '"+msg+"' WHERE cod = '"+i+"'";	
	                                 stmt.execute(sql);				
	    	                 sql = "";							
	    	 			
	    	                System.out.println("Alterado");
	                 }						
               } // Fecha if vc ou b
} // Fecha while

} // Fecha for

2 Respostas

dmandrak

Ae campeão, usa as tags code e /code para ficar bem visível para nós.

Com relação a seu problema vou ver seu código, pq eu tenho um parecido que não mata o loop não.

Mas só vou ver seu código se ele estiver assim ó :
sql = "SELECT max(cod) QTD FROM sisb";
rs = stmt.executeQuery(sql);
sql = "";

rs.next();
n=0;
n = rs.getInt("QTD");

JOptionPane.showMessageDialog(null,"numero de registros: "+n );

for (int i =1; i <=n; i++){

sql = "select ident, codCatego, categoria, dat from sisb where cod = '"+i+"'";
rs = stmt.executeQuery(sql);
sql = "";

while (rs.next()){

id = rs.getString("ident");
ccat= Integer.parseInt(rs.getString("codCatego"));
cat = rs.getString("categoria");
dn = rs.getString("dat");

System.out.println(" ");

if (!cat.equals("Vc") && !cat.equals("B")){

System.out.println(id+" "+ccat+" "+cat+" "+dn);
System.out.println("É Diferente de b ou vc!");

a = Calcular_update(dn);
System.out.println("Valor do calculo de data: "+a);

if (ccat == 1){
if (a == 1){
msg = ("BM");
}
if (a == 2){
msg = ("No"); }
if (a == 3){
msg = ("B");
}
}
else {
if (a == 1){
msg = ("BF");
}
if (a == 2 || a == 3){
msg = ("Novilha");
}
}
System.out.println("Categoria nova: "+msg);

if (!cat.equals(msg)){
System.out.println("Categorias diferentes");
sql = "update sisb set categoria = '"+msg+"' WHERE cod = '"+i+"'";
stmt.execute(sql);
sql = "";

System.out.println("Alterado");
}
} // Fecha if vc ou b
} // Fecha while
} // Fecha for
cristiano.oliveira

ok!

Vlw a dica. Segue então o código.

Obrigado pela ajuda!

sql = "SELECT max(cod) QTD FROM sisb"; 
rs = stmt.executeQuery(sql); 
sql = ""; 

rs.next(); 
n=0; 
n = rs.getInt("QTD"); 

JOptionPane.showMessageDialog(null,"numero de registros: "+n ); 

for (int i =1; i <=n; i++){ 

          sql = "select ident, codCatego, categoria, dat from sisb where cod = '"+i+"'"; 
          rs = stmt.executeQuery(sql); 
          sql = ""; 
 
          while (rs.next()){ 

                   id = rs.getString("ident"); 
                   ccat= Integer.parseInt(rs.getString("codCatego")); 
                   cat = rs.getString("categoria"); 
                   dn = rs.getString("dat"); 

                   System.out.println(" "); 

                   if (!cat.equals("Vc") && !cat.equals("B")){ 

                             System.out.println(id+" "+ccat+" "+cat+" "+dn); 
                             System.out.println("É Diferente de b ou vc!"); 

                             a = Calcular_update(dn); 
                             System.out.println("Valor do calculo de data: "+a); 

                             if (ccat == 1){ 
                                       if (a == 1){ 
                                                  msg = ("BM"); 
                                       } 
                                       if (a == 2){ 
                                                  msg = ("No"); 
                                       } 
                                       if (a == 3){ 
                                                msg = ("B"); 
                                       } 
                               } 
                               else { 
                                       if (a == 1){ 
                                                  msg = ("BF"); 
                                       } 
                                       if (a == 2 || a == 3){ 
                                                 msg = ("Novilha"); 
                                       } 
                                } 
                                System.out.println("Categoria nova: "+msg); 

                                if (!cat.equals(msg)){ 
                                        System.out.println("Categorias diferentes"); 
                                        sql = "update sisb set categoria = '"+msg+"' WHERE cod = '"+i+"'"; 
                                        stmt.execute(sql); 
                                        sql = ""; 

                                        System.out.println("Alterado"); 
                                } 
                      } // Fecha if vc ou b 
            } // Fecha while 
} // Fecha for
Criado 16 de dezembro de 2008
Ultima resposta 16 de dez. de 2008
Respostas 2
Participantes 2