Srs., boa noite.
Recebi a tarefa de checar o cpf e cnpj de 105.000 registros que estão em uma tabela access fiz o programa e tudo o problema é o seguinte: Ele inicia o programa muito rápido e depois vai diminuindo a velocidade até parar. A solução que eu encontrei foi separar a tabela em vários selects porém isto me consome muito tempo de processamento pois preciso ficar acompanhando se esta acabando para iniciar um novo processamento. Gostaria de saber o seguinte, o resultSet tem tamanho ou eu preciso ir liberando memória ou algo parecido.
Obrigado pela ajuda,
O código segue abaixo.
IvonildoJR
package BancoDados;
import java.util.*;
import java.io.*;
//import javax.servlet.*;
//import javax.servlet.http.*;
import java.sql.*;
public class BancoDados {
public static void main(String args[]){
Scanner tc = new Scanner(System.in);
ResultSet rs = null;
Connection conexao = null;
Statement stateConexao = null;
String opcao ="s", municipio[]=
{"ACOPIARA","ALTO SANTO","ASSARÉ","AURORA","BANABUIU","BOA VIAGEM",
"BREJO SANTO","CANINDÉ","CARIRÉ","CAUCAIA","CEDRO","CRATO","GRANJA",
"IGUATU","INDEPENDÊNCIA","IRACEMA","IRAUÇUBA","ITAPIPOCA","JAGUARETAMA",
"JAGUARIBARA","JAGUARIBE","JAGUARUANA","JARDIM","JATI","JUCÁS",
"LIMOEIRO DO NORTE","MADALENA","MARANGUAPE","MAURITI","MILAGRES","MILHÃ",
"MISSÃO VELHA","MOMBAÇA","MONSENHOR TABOSA","MORADA NOVA","NOVO ORIENTE",
"ORÓS","PARAMBU","PENAFORTE","PENTECOSTE","PORTEIRAS","QUITERIANÓPOLIS",
"QUIXADÁ","QUIXELÔ","RUSSAS","SABOEIRO","SANTA QUITÉRIA","SANTANA DO ACARAÚ",
"SANTANA DO CARIRI","SENADOR POMPEU","SOBRAL","SOLONOPOLES","TABULEIRO DO NORTE",
"TAMBORIL","TAUÁ","VÁRZEA ALEGRE","VIÇOSA DO CEARÁ"
};
conexao = conectaBanco(conexao);
for(int i=0;i<municipio.length && opcao.equalsIgnoreCase("S");i++){
System.out.println("Processa o " + (i + 1) + "o município: " + municipio[i]);
opcao = tc.next();
if(opcao.equalsIgnoreCase("S"))
mostraBanco(conexao,municipio[i]);
System.out.println("Continua processamento(S/N)?:");
opcao = tc.next();
}
}
public static Connection conectaBanco(Connection conexao){
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
conexao = DriverManager.getConnection("jdbc:odbc:cadastro","","");
//stateConexao = Conexao.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
return conexao;
}
catch (SQLException erro){
erro.printStackTrace();
}catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conexao;
}
public static void mostraBanco(Connection conexao, String municipio){
try {
ResultSet rs = null;
Statement stateConexao = conexao.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
//Variaveis
String msg="", msgtp="", chave, cpfcnpj,indice,campo;
int reg = 1;
String sql =
"select * from frente_indexada where munic_prop = '" + municipio + "'";
//Executa sql
rs = stateConexao.executeQuery(sql);
//Vai para o 1o registro
rs.first();
//1 - cpf_cnpj - Do produtor
//2 - cpf_conj - Do conjuge
//3 - cpf_cnpj_prop - Do proprietário
campo = "cpf_cnpj";
msgtp = "1-";
//processa enquanto tiver dados
while(!rs.isAfterLast()){
chave = rs.getString("chave");
indice = rs.getString("indice");
if (rs.getString("erro") == null)
msg = "";
else
msg = rs.getString("erro");
//if(rs.getString("cpf_cnpj") == null){
if(rs.getString(campo) == null){
cpfcnpj = " ";
}
else{
//cpfcnpj = rs.getString("cpf_cnpj");
cpfcnpj = rs.getString(campo);
}
if (cpfcnpj == null || (cpfcnpj.length() != 11 && cpfcnpj.length() != 14) || (cpfcnpj.indexOf(" ") >= 0) ){
msg += msgtp+ "Tam_invalido_nulo";
}
else{
if(cpfcnpj.length() == 11){
msg += msgtp + Cpf_Cnpj.testaDigitoCpf(cpfcnpj);
}
else{
msg += msgtp + Cpf_Cnpj.testaDigitoCnpj(cpfcnpj);
}
}
System.out.println("Indice:" + indice + " Chave:" + chave + " Cpf/Cnpj:" + cpfcnpj + " Municipio:" + municipio + " Msg:" + msg);
updateBanco(indice, msg, conexao);
reg++;
rs.next();
}
rs.close();
System.out.println("-Fim de Processamento-" + reg);
} catch (Exception erro) {
System.out.println(erro.getMessage());
}
}
public static void updateBanco(String indice, String msg, Connection conexao){
try{
Statement stateConexao=conexao.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
int indiceInteiro = Integer.parseInt(indice);
String sql = "UPDATE FRENTE_INDEXADA set erro = '" + msg + "' where indice = " + indiceInteiro;
stateConexao.executeUpdate(sql);
}
catch (Exception e){
System.out.println(e.getMessage());
}
}
}
EDIT - (Moderador) - Por favor, use os tags CODE para formatar seu código. É simples: olhe o botãozinho “Code” que está na mesma linha de “Corpo da Mensagem”.