Banco de dados em uma thread

5 respostas
E

Oi pessoal, tudo bom!!?

Eu preciso executar um ResultSet de um banco de dados dentro de uma thread, e num to conseguindo.. muito treta...

OLha miha clase ta assim, mas na hora que vou executar a thread, da um erro de que o ResultSet esta fechado "ResultSet is closed", como faço para exeecutar um ResultSet dentro de uma Thread, olham meu codigo como esta:

package cadastro.dao; 

import java.lang.reflect.InvocationTargetException; 
import java.sql.*; 
import java.util.ArrayList; 
import javax.swing.*; 
import cadastro.beans.Lotes; 
import cadastro.util.ThreadProgressbar; 

public class ImportaLotesDB extends Thread { 
    
    private ResultSet rs; 
    private int leilao; 
    private String tipo; 
    
    public int countLotes(int leilao, String tipo, String dataLeilao) { 
        
        Connection conn = ConnectionManager.getAccessConexao(); 
        
        String sql = "SELECT COUNT(Leilao.Lote) AS qtdeAchados"; 
              sql += " FROM (Leilao INNER JOIN Empresa ON Leilao.IdEmpresa = Empresa.IdEmpresa)"; 
              sql += " INNER JOIN Veiculo ON (Veiculo.IdLeilao = Leilao.IdLeilao) AND"; 
              sql += " (Veiculo.IdEmpresa = Leilao.IdEmpresa) AND (Veiculo.Placa = Leilao.Placa)"; 
              sql += " AND (Empresa.IdEmpresa = Veiculo.IdEmpresa)"; 
              sql += " WHERE Leilao.dataleilao = #"+ dataLeilao +"#"; 
        System.out.println("SQL = " + sql); 
        
        try {              
            Statement stmt = conn.createStatement(); 
            ResultSet rs = stmt.executeQuery(sql);                        
            
            if(rs.next()){ 
                return rs.getInt(1); 
            } 
            
        } catch (SQLException e) { 
            System.out.println("Erro de sql!!!!!"); 
            e.printStackTrace(); 
            
        } finally { 
           ConnectionManager.closeMysql(conn); 
        } 
        
        return 0; 
    } 
    
    public void importaLotes(int leilao, String tipo, String dataLeilao, JProgressBar importacaoDadosProgressBar) { 
        
        if ( importacaoDadosProgressBar != null ) { 
            importacaoDadosProgressBar.setMinimum(0); 
            importacaoDadosProgressBar.setMaximum(countLotes(leilao,tipo,dataLeilao));                        
        }                                        
        
        // Deleta todos os registros dos lotes 
        LotesDB.deleteAll(leilao,tipo); 
        
        Connection conn = ConnectionManager.getAccessConexao(); 
        
        String sql = "SELECT Leilao.Lote, Veiculo.Tipo, Veiculo.AnoModelo,"; 
              sql += " Veiculo.Placa, Veiculo.Cor, Veiculo.Cidade, Veiculo.Estado"; 
              sql += " FROM (Leilao INNER JOIN Empresa ON Leilao.IdEmpresa = Empresa.IdEmpresa)"; 
              sql += " INNER JOIN Veiculo ON (Veiculo.IdLeilao = Leilao.IdLeilao) AND"; 
              sql += " (Veiculo.IdEmpresa = Leilao.IdEmpresa) AND (Veiculo.Placa = Leilao.Placa)"; 
              sql += " AND (Empresa.IdEmpresa = Veiculo.IdEmpresa)"; 
        sql += " WHERE Leilao.dataleilao = #"+ dataLeilao +"#"; 
        System.out.println("SQL = " + sql);                  
        
        try {              
            Statement stmt = conn.createStatement(); 
            ResultSet rs = stmt.executeQuery(sql);                          
            
            this.rs = rs; 
            this.leilao = leilao; 
            this.tipo = tipo; 
            this.start(); 
            
            //ThreadProgressbar threadProgressBar = new ThreadProgressbar(importacaoDadosProgressBar); 

        } catch (SQLException e) { 
            System.out.println("Erro de sql!!!!!"); 
            e.printStackTrace(); 
            
        }  finally { 
           ConnectionManager.closeMysql(conn); 
        } 
    } 
    
    public void run() {        
        try { 
         while(rs.next()){                
                Lotes lotes = new Lotes(); 
                lotes.setLeilao(leilao); 
                lotes.setLote(rs.getString(1)); 
                lotes.setTipo(tipo); 
                lotes.setMarca(rs.getString(2)); 
                lotes.setAnoModelo(rs.getString(3)); 
                lotes.setPlaca(rs.getString(4)); 
                lotes.setFoto(""); 
                lotes.setCor(rs.getString(5)); 
                lotes.setCidade(rs.getString(6)); 
                lotes.setEstado(rs.getString(7)); 
                lotes.setRegiao(""); 
                lotes.setZona(""); 
                lotes.setDetalhes(""); 
                lotes.setLanceMinimo(0.0f); 
                lotes.setQtdeLances(0); 
                lotes.setInicio(""); 
                lotes.setFim(""); 
                lotes.setClienteAtual(""); 
                lotes.setEmailClienteAtual(""); 
                lotes.setLanceClienteAtual(0.0f); 
                lotes.setCliente2(""); 
                lotes.setEmail2(""); 
                lotes.setMaiorLance2(0.0f); 
                lotes.setCliente3(""); 
                lotes.setEmail3(""); 
                lotes.setMaiorLance3(0.0f);    
                lotes.setValorLiberacao(0.0f); 
                lotes.setOferta(0.0f); 
                
                // inseres os dados no outro banco 
                LotesDB.insert(lotes); 
            }          
         } catch (SQLException e) { 
            System.out.println("Erro de sql!!!!!"); 
            e.printStackTrace(); 
            
        } 
    } 
}

5 Respostas

R

em que linha ele aponta?

R

em que linha ele aponta?

E

dentro do run
while(rs.next()){

R

cara, dei uma olhada meio por cima no seu código e naum achei nada de incomum…

vc chama o método start() que chama o run().

vc atribuiu o rs ao this.rs antes de chamar o start…

verifique antes da atribuicao:

this.rs = rs;

se o rs do método está fechado utilizando o método isClosed.

if(rs.isClosed()) { System.out.println("FECHADO"); } else { System.out.println("ABERTO"); }

E

Beleza valew cara!!

Vou ver!!

Criado 15 de fevereiro de 2005
Ultima resposta 15 de fev. de 2005
Respostas 5
Participantes 2