Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

6 respostas
O

Pessoal,
Estou tentando importar um arquivo .txt para um BD e a aplicação está apresentando o seguinte erro:
Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException

Minha Classe Importacao:

import java.io.BufferedReader;

import java.io.File;

import java.io.FileReader;

import java.io.IOException;

import javax.swing.JOptionPane;
public class Importacao {

private  File                 file;

private  StringBuffer         sb;

private  FileReader           reader;

private  BufferedReader       bufReader;

private  String               lugar;

private  String               arquivo;

private  String               caminho_Completo;

public   String               var;

public   String               linha = “”;

public   String               sql;

String agencia,conta,documento,valor,banco,lote, sequencial, motivo;

public Importacao(String arquivo)

{

this.lugar = c:\Osvaldo;

this.arquivo = arquivo;

this.caminho_Completo = getLugar() +"\"+arquivo;

this.var = “”;

this.linha = “”;

this.agencia = " ";

this. conta = “”;

this.  documento = “”;

this.valor = “”;

this. banco = “”;

this.lote = “”;

this. sequencial = “”;

this.motivo = “”;

this.sql = “”;
file = new File(getCaminho_Completo());    
 sb = new StringBuffer();
}

public String getLugar()

{

return lugar;

}
public String getArquivo()

{

return arquivo;

}
public String getCaminho_Completo()

{

return caminho_Completo;

}
public void importa(Conexao1 con){ 
    
                
     try{   
                              
         reader = new FileReader(file);
         bufReader = new BufferedReader(reader);
          while (linha!=null) {
           linha = bufReader.readLine();
           if (linha.charAt(32)== ' ' )
           {
               continue;
           }    
           agencia = linha.substring(3, 7);
           conta = linha.substring(7, 16);
           documento = linha.substring(17, 23);
           valor = linha.substring(24, 34);
           banco = linha.substring(38,41);
           lote = linha.substring(41,48);
           sequencial = linha.substring(48, 51);
           motivo = linha.substring(51, 53);           
           
          Cheque_DSR cheque_DSR = new Cheque_DSR(agencia, conta, documento, valor, banco, lote, sequencial, motivo);    
         
          String sql_inclusao = "INSERT INTO tbldsr733(agencia, conta, documento, valor, banco, lote, sequencial, motivo)";
          sql_inclusao += "values('"+cheque_DSR.getAgencia()+"'"+cheque_DSR.getConta()+"'"+"'"+cheque_DSR.getDocumento()+"'"+"'"+cheque_DSR.getValor()+"'"+"'"+cheque_DSR.getBanco()+"'"+"'"+cheque_DSR.getLote()+"'"+"'"+cheque_DSR.getSequencial()+"'"+"'"+cheque_DSR.getMotivo()+"')";       
   
          con.Executa_SQL(sql_inclusao);
        
          
           if (linha!=null) {
               sb.append( linha + "\r\n" );
          } 
          
          
       } 
 //  while (linha!=null);
 //   while (linha!=null);    
     
    bufReader.close();
    reader.close();
    con.Fecha_Conexao();

}
catch (IOException e) {
    e.printStackTrace();
    
} 


    
    
}

}

E minha classe Conexao1:

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.ResultSetMetaData;

import java.sql.SQLException;

import java.sql.Statement;

import javax.swing.JOptionPane;

import java.sql.PreparedStatement;
public class Conexao1 {

private Connection          connection;

private Statement           statement;

private ResultSet           rs,resultSet;

private ResultSetMetaData   resultSetMD;

private PreparedStatement   Pstatement;

private String              caminho;

private boolean             conexao_aberta;

private String              usuario;

private String              senha;

public int i = 0;
public Conexao1(String caminho, String usuario, String senha)

{

this.caminho = caminho;

this.usuario = usuario;

this.senha = senha;

this. conexao_aberta = false;

}
public Connection getconnection()
{
    return connection;
} 

public Statement getstatement()
{
    return statement;
}

 public ResultSet getresultSet()
{
    return rs;
}

public String getCaminho()
{
    return caminho;
}
public String getUsuario()
{
    return usuario;
}

public String getSenha()
{
    return senha;
}

 public void setCaminho(String c)
{
    if ( Conexao_Aberta() )
        Fecha_Conexao();
    //
    if ( c.length() < 22 )
        caminho =  "jdbc:mysql://" + "10.34.101.180" + ":3306/" + "rotinas";
    else
        caminho = c;
}


public String Abre_Conexao()
{
    String resp="";
    try
    {
        // cria a conexao
         connection = DriverManager.getConnection(getCaminho(),getUsuario(),getSenha());
         statement = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE,ResultSet.HOLD_CURSORS_OVER_COMMIT);
        statement = connection.createStatement();
        // consulta o banco de dados 
        Pstatement = connection.prepareStatement("select agencia,conta,documento,valor,banco,lote,sequencial,motivo from tblDsr733",ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
       rs = Pstatement.executeQuery();
     rs.next();
        //
        resp=resp.concat("Conexão ABERTA\n");
        conexao_aberta = true;
    }
    catch (SQLException sqlException)
    {
        resp=resp.concat("Conexão NÃO estabelecida\n");
    }
    //
    return resp;
}
public String Executa_SQL(String x)

{

int retorno = 0;

String resp = “”;

if ( conexao_aberta )

{
try
        {
            System.out.println(x);             
            retorno = statement.executeUpdate(x);               
                         
                          
            resp=resp.concat("Sentença SQL executada com sucesso!\n");
                 
           
        }
        catch (SQLException sqlException)
        {
            resp=resp.concat("Erro ao tentar executar a sentença SQL\n");
        }
    }
    else
    {
        resp=resp.concat("A Conexão se encontra fechada\n");
       
    }
    //
   
    return resp;
    
}


//  public void Inserir_BD(){
 //     connection.
 // }

 
   public String Fecha_Conexao()
   {
    String resp = "";
    //
    if ( conexao_aberta )
    {
        try
        {
          //  Executa_SQL("Update Contatos set Nome = nome");
            connection.commit();
            connection.close();
            conexao_aberta = false;
            statement.close();
            resp=resp.concat("Conexão FECHADA\n");
        }
        catch (SQLException sqlException)
        {
            resp=resp.concat("Conexão NÃO pode ser fechada\n");
        }
    }
    else
    {
        resp=resp.concat("Conexão JÁ se encontra fechada\n");
    }
    //
    return resp;
}


   
   
   
 
public boolean Conexao_Aberta()
{
    return conexao_aberta;
}

}

6 Respostas

luis.soares

osvaldol, sei que é novo por aqui. Então peço que leia este tópico [url]http://www.guj.com.br/posts/list/50115.java[/url] que trata de algumas regras para postagem de tópicos. No seu caso seu código ficou sem formatação, fica difícil ler assim...
Estou postando seu código formatado aqui abaixo :

Sua classe Importacao:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import javax.swing.JOptionPane;


public class Importacao {
private File file;
private StringBuffer sb;
private FileReader reader;
private BufferedReader bufReader;
private String lugar;
private String arquivo;
private String caminho_Completo;
public String var;
public String linha = "";
public String sql;


String agencia,conta,documento,valor,banco,lote, sequencial, motivo;


public Importacao(String arquivo)
{
this.lugar = "c:\Osvaldo";
this.arquivo = arquivo;
this.caminho_Completo = getLugar() +"\"+arquivo;
this.var = "";
this.linha = "";
this.agencia = " ";
this. conta = "";
this. documento = "";
this.valor = "";
this. banco = "";
this.lote = "";
this. sequencial = "";
this.motivo = "";
this.sql = "";

file = new File(getCaminho_Completo());
sb = new StringBuffer();

}
public String getLugar()
{
return lugar;
}

public String getArquivo()
{
return arquivo;
}

public String getCaminho_Completo()
{
return caminho_Completo;
}

public void importa(Conexao1 con){

try{

reader = new FileReader(file);
bufReader = new BufferedReader(reader);
while (linha!=null) {
linha = bufReader.readLine();
if (linha.charAt(32)== ' ' )
{
continue;
}
agencia = linha.substring(3, 7);
conta = linha.substring(7, 16);
documento = linha.substring(17, 23);
valor = linha.substring(24, 34);
banco = linha.substring(38,41);
lote = linha.substring(41,4;
sequencial = linha.substring(48, 51);
motivo = linha.substring(51, 53);

Cheque_DSR cheque_DSR = new Cheque_DSR(agencia, conta, documento, valor, banco, lote, sequencial, motivo);

String sql_inclusao = "INSERT INTO tbldsr733(agencia, conta, documento, valor, banco, lote, sequencial, motivo)";
sql_inclusao += "values('"+cheque_DSR.getAgencia()+"'"+cheque_DSR.getConta()+"'"+"'"+cheque_DSR.getDocumento()+"'"+"'"+cheque_DSR.getValor()+"'"+"'"+cheque_DSR.getBanco()+"'"+"'"+cheque_DSR.getLote()+"'"+"'"+cheque_DSR.getSequencial()+"'"+"'"+cheque_DSR.getMotivo()+"')";

con.Executa_SQL(sql_inclusao);


if (linha!=null) {
sb.append( linha + "\r\n" );
}


}
// while (linha!=null);
// while (linha!=null);

bufReader.close();
reader.close();
con.Fecha_Conexao();

}
catch (IOException e) {
e.printStackTrace();

}


}

}

Sua classe Conexao1:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JOptionPane;
import java.sql.PreparedStatement;


public class Conexao1 {
private Connection connection;
private Statement statement;
private ResultSet rs,resultSet;
private ResultSetMetaData resultSetMD;
private PreparedStatement Pstatement;
private String caminho;
private boolean conexao_aberta;
private String usuario;
private String senha;
public int i = 0;


public Conexao1(String caminho, String usuario, String senha)
{
this.caminho = caminho;
this.usuario = usuario;
this.senha = senha;
this. conexao_aberta = false;
}



public Connection getconnection()
{
return connection;
}

public Statement getstatement()
{
return statement;
}

public ResultSet getresultSet()
{
return rs;
}

public String getCaminho()
{
return caminho;
}
public String getUsuario()
{
return usuario;
}

public String getSenha()
{
return senha;
}

public void setCaminho(String c)
{
if ( Conexao_Aberta() )
Fecha_Conexao();
//
if ( c.length() < 22 )
caminho = "jdbc:mysql://" + "10.34.101.180" + ":3306/" + "rotinas";
else
caminho = c;
}


public String Abre_Conexao()
{
String resp="";
try
{
// cria a conexao
connection = DriverManager.getConnection(getCaminho(),getUsuario(),getSenha());
statement = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE,ResultSet.HOLD_CURSORS_OVER_COMMIT);
statement = connection.createStatement();
// consulta o banco de dados
Pstatement = connection.prepareStatement("select agencia,conta,documento,valor,banco,lote,sequencial,motivo from tblDsr733",ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
rs = Pstatement.executeQuery();
rs.next();
//
resp=resp.concat("Conexão ABERTA\n");
conexao_aberta = true;
}
catch (SQLException sqlException)
{
resp=resp.concat("Conexão NÃO estabelecida\n");
}
//
return resp;
}



public String Executa_SQL(String x)
{
int retorno = 0;
String resp = "";
if ( conexao_aberta )
{

try
{
System.out.println(x);
retorno = statement.executeUpdate(x);


resp=resp.concat("Sentença SQL executada com sucesso!\n");


}
catch (SQLException sqlException)
{
resp=resp.concat("Erro ao tentar executar a sentença SQL\n");
}
}
else
{
resp=resp.concat("A Conexão se encontra fechada\n");

}
//

return resp;

}


// public void Inserir_BD(){
// connection.
// }


public String Fecha_Conexao()
{
String resp = "";
//
if ( conexao_aberta )
{
try
{
// Executa_SQL("Update Contatos set Nome = nome");
connection.commit();
connection.close();
conexao_aberta = false;
statement.close();
resp=resp.concat("Conexão FECHADA\n");
}
catch (SQLException sqlException)
{
resp=resp.concat("Conexão NÃO pode ser fechada\n");
}
}
else
{
resp=resp.concat("Conexão JÁ se encontra fechada\n");
}
//
return resp;
}






public boolean Conexao_Aberta()
{
return conexao_aberta;
}

}

Pronto.

Agora meu amigo, você precisa colocar o stack trace completo do erro que vc está tendo, para que possamos lhe ajudar.

Leia o tópico que te passei no início deste menagem para formatar corretamente o código.

Depois disso vamos te ajudando.

Valeu !

O

Caro Luis,
Realmente sou novato, tando no forum como em programação Java. Portanto gostaria de mais algumas informações. Não consigo
formatar meu código da maneira que você formatou, mesmo já tendo tentado várias vezes. O que significa " stack trace "? Procurei a
tradução, mas não me trouxe nenhum esclarecimento. Tá vendo, sou novato mesmo.

Grato.
Osvaldo

O

Consegui Importar o arquivo, mas demorou 8 minutos para importar um arquivo de 15.000 linhas. Esta demora é normal no Java. Usando o VB a importaçao do mesmo arquivo não passa de 10 segundos. Perguntas: Existe alguma API no Java para importação
mais rápida? Poderia ser utilizada Coleções “ArrayList, Map etc…”?? grato

luis.soares

Osvaldo, quanto à formatação do código, basta que vc inclua o seu código entre as tags .

Sobre stackTrace, veja : http://en.wikipedia.org/wiki/Stack_trace. Em resumo é o registro das chamadas de métodos e recursos que antecederam a ocorrência de determinado erro (embora possamos obter o stack trace independente de ocorrência de erro). Com ele fica mais fácil identificarmos em qual linha ocorreu o erro e os seus indícios.

Sobre a demora na execução do código, ela não é normal. Um ponto fundamental analisando superficialmente seu código é que você não usou preparedStatements para as operações de inclusão no banco de dados. Isto impacta negativamente e muito na performance.

Leia sobre preparedStatements, e implemente no seu código. Com certeza haverá melhora sensível. Veja : http://java.sun.com/docs/books/tutorial/jdbc/basics/prepared.html

Bom trabalho

O

Luis,
Desculpe-me, mas não consegui formatar ainda. No cabecalho vejo os seguintes botões:
B* I* _u Quote Code* List Img URL Google …
Em qual deles devo clicar para que formatar meu código?

Quanto a demora na importação do arquivo, foi feita da seguinte forma:

a) Faço a conexao com o BD da seguinte forma, criando um psstatemente:

public String Abre_Conexao()

{

String resp="";

try

{

// cria a conexao

connection = DriverManager.getConnection(caminho,osvaldo@%,140568);

connection.setAutoCommit(true);

connection.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);

connection.setHoldability(ResultSet.HOLD_CURSORS_OVER_COMMIT);

// cria Statement para consultar banco de dados

statement = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE,ResultSet.HOLD_CURSORS_OVER_COMMIT);

// consulta o banco de dados

Pstatement = connection.prepareStatement(INSERT INTO tblDsr733 agencia,conta,documento,valor,banco,lote,sequencial,motivo)VALUES (?, ?, ?, ?, ?, ?, ?,?));

Pstatement1 = connection.prepareStatement(select codigo, agencia,conta,documento,valor,banco,lote,sequencial,motivo from tblDsr733,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);

rs = Pstatement1.executeQuery();

rs.next();

//

resp=resp.concat(Conexão ABERTA\n);

conexao_aberta = true;

}

catch (SQLException sqlException)

{

resp=resp.concat(Conexão NÃO estabelecida\n);

}

//

return resp;

}

a) Um botão em form principal chama a função importa, passando a conexao ja´realizada:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {

importac.importa(conexao);

}

b) Eis minha função importa dentro da classe Importac que depois de obter os dados contidos em cada linha
do arquivo chama a função Inserir_BD passando esses dados como parâmetros:

public void importa(Conexao con){ 
    
                
     try{   
        
           reader = new FileReader(file);
         bufReader = new BufferedReader(reader);
          while (linha!=null) {
           linha = bufReader.readLine();
           if (linha.charAt(32)!= ' ' )
           {                                                
                agencia = linha.substring(3, 7);
               conta = linha.substring(7, 16);
               documento = linha.substring(19, 23);
               valor = linha.substring(24, 34);
               banco = linha.substring(40,42);
               lote = linha.substring(41,48);
               sequencial = linha.substring(48, 51);
              motivo = linha.substring(51, 53);          
           
              cheque_DSR = new Cheque_DSR(agencia, conta, documento, valor, banco, lote, sequencial, motivo);  
          
              con.Inserir_BD(agencia, conta, documento, valor, banco, lote, sequencial, motivo);
         
          
             }
          
           if (linha!=null) {
               sb.append( linha + "\r\n" );
          } 
                       
       } 
       bufReader.close();
    reader.close();
    con.Fecha_Conexao();

}
catch (IOException e) {
    e.printStackTrace();
    
}
catch (NullPointerException e) {

e.printStackTrace();

}
}

}

c) E por fim minha função Inserir_BD dentro da classe Conexao:

public void Inserir_BD(String agencia, String conta, String documento, String valor, String banco, String lote, String sequencial, String motivo){

try{

Pstatement.setString(1,agencia);

Pstatement.setString(2,conta);

Pstatement.setString(3,documento);

Pstatement.setString(4,valor);

Pstatement.setString(5,banco);

Pstatement.setString(6,lote);

Pstatement.setString(7,sequencial);

Pstatement.setString(8,motivo);

row = Pstatement.executeUpdate();

}

catch (SQLException sqlException)

{

JOptionPane.showMessageDialog(null,Erro na query,Proximo,JOptionPane.ERROR_MESSAGE);

}

}

Você pode observar que obtenho as informação em cada linha do arquivo utilizando “SUBSTRING”. Não será aí que está o motivo
da demora na importação?

Filipe_A

É o Code.

Coloque um antes e um depois do seu codigo.

:smiley:

Criado 13 de abril de 2009
Ultima resposta 15 de abr. de 2009
Respostas 6
Participantes 3