Criar classe conexao e classe query....objeto null

2 respostas
homisinho

Ola pessoal sei q tem bastante material sobre isso mas procurei o erro e n encontrei....

eu tenho uma classe conexao q gera a conexao!!!

/*
 * Conexao.java
 *
 * Created on 18 de Setembro de 2007, 16:04
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package ####;

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

/**
 *
 * @author homisinho
 */
public class Conexao {
     public Connection conn;  
     public String mensagem;       
     public boolean status;
     public String banco,user,senha,servidor; 
     public int porta;     
     public String caminho;          
    /** Creates a new instance of Conexao */
     public void cararquivo(){
        caminho = new File(".").getAbsolutePath();
        try{
        FileReader reader = new FileReader(caminho+"conexao.cew");
        BufferedReader leitor = new BufferedReader(reader);
        banco = leitor.readLine();
        user = leitor.readLine();
        senha = leitor.readLine();
        servidor = leitor.readLine();
        porta = Integer.parseInt(leitor.readLine());
        leitor.close();
        reader.close();
        }
        catch (IOException e) { 
          mensagem = "Não pode abrir o arquivo de configuração do BD.";
          JOptionPane.showMessageDialog(null,"Não pode abrir o arquivo de configuração do BD.\n("+e.toString()+")","PROBLEMAS",JOptionPane.ERROR_MESSAGE);
        }
    }
     
    public Conexao() {
        ////carrega todas as variaveis do arquivo para conectar o BD...
        cararquivo();
        ///////////////
        try {
             //Registrando o driver:
             Class.forName("com.mysql.jdbc.Driver").newInstance();
        } catch(Exception ex){
           mensagem = "Driver de BD não carregado. ";
           status=false;
           JOptionPane.showMessageDialog(null,"Problemas ao carregar o Driver do BD.\n("+ex.toString()+")","PROBLEMAS",JOptionPane.ERROR_MESSAGE);
        }
             
        try{
             //Estabelecendo a conexão através do ODBC criado no Painel de Controle:             
             Connection conn = DriverManager.getConnection("jdbc:mysql://"+servidor+":"+porta+"/"+banco,user,senha);
             status=true;             
        } catch(Exception e) {    
             mensagem = "Problemas ao conectar o banco de dados. ";
             status=false;             
             JOptionPane.showMessageDialog(null,"Problemas ao conectar o banco de dados.\n("+e.toString()+")","PROBLEMAS",JOptionPane.ERROR_MESSAGE);             
        }                     
    }
    
     public Connection getConexao() {  
        return conn;  
    }
    
    public void disconnect(){
        //Fechando a conexão:   
        try{
           conn.close();
           status=false;
        } catch(Exception e) {    
             mensagem = "Problemas ao encerrar conexão. ";
             JOptionPane.showMessageDialog(null,"Problemas ao encerrar conexão.\n("+e.toString()+")","PROBLEMAS",JOptionPane.ERROR_MESSAGE);
        }
    }    
}

tenho tbm uma classe q gera o meu Statement e implementei alguns metodos q serão mais usados...

/*
 * Query.java
 *
 * Created on 19 de Setembro de 2007, 09:15
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package ####;


import java.sql.*;

/**
 *
 * @author homisinho
 */
public class Query {

//Declarando as variáveis publicas
public Connection Database = null;
public boolean status;
public ResultSet rs;
public Statement stm;
private boolean statusreg =true;
// fim da declaração

    /** Creates a new instance of Query */
    public Query(Connection Db) {
        try {
            Database=Db;
            stm = Database.createStatement();          
            status = false;        
        } catch(SQLException e) {
            e.printStackTrace();
            System.out.print("Erro ao criar Query!");
        }        
    }
    
public void open(String sql) {
   try {
        rs= stm.executeQuery(sql);        
        status = true;    
    } catch(SQLException e) {
        status = false;
        System.out.print("Erro ao executar Query!");
        e.printStackTrace();
    }  
}

public void execute(String sql) {
   try {
        stm.execute(sql);        
        status = true;    
    } catch(SQLException e) {
        status = false;
        System.out.print("Erro ao executar Query!");
        e.printStackTrace();
    }  
}

public void close() {
   try {
        stm.close();        
    } catch(SQLException e) {
        status = false;
        System.out.print("Erro ao executar Query!");
        e.printStackTrace();
    }  
}

public String fieldbyname(String field){
String value = null;
    try {        
       if(rs.getString(1)!=null) status=false;
       if(status) rs.next();
       value = rs.getString(field);
       status=true;
    } catch(SQLException e) {
        System.out.println("Field invalido!");
    }
    return value;
}

public int recordcount(){
int tot=0;
    try {
      rs.first();        
      do {
      tot++;
      } while(rs.next());      
    } catch(SQLException e) {
        status = false;
        System.out.print("Erro ao executar Query!");
        e.printStackTrace();
    }  

return tot;
}

public boolean next(){
boolean retorno=false;
  try {        
        if(rs.next()){retorno=true;}
        
    } catch(SQLException e) {
        System.out.print("Erro ao executar Query!");
    }  
return retorno;
}

public boolean prev(){
  boolean retorno=false;
  try {        
        if(rs.previous()){retorno=true;}
    } catch(SQLException e) {
        System.out.print("Erro ao executar previous!");
    }  

return retorno;
}

public boolean first(){
  boolean retorno=false;
  try {        
        if(rs.first()){retorno=true;}
    } catch(SQLException e) {
        System.out.print("Erro ao executar first!");
    }  

return retorno;
}

public boolean last(){
  boolean retorno=false;
  try {        
        if(rs.last()){retorno=true;}
    } catch(SQLException e) {
        System.out.print("Erro ao executar last!");
    }  

return retorno;
}        
}

e na classe principal estou criando uma conexao e criando uma query...

Conexao BD = new Conexao();
        ///cria uma query
        Query Query1 = new Query(BD.getConexao());
        //Executando SQL:   
        try{
           Query1.open("SELECT * FROM ####");
           Query1.last();
           //Adquirindo através de um objeto ResulSet, os registros retornados pela SQL:              
           String teste = Query1.fieldbyname("DEMANDAPONTA");
           String teste2 = Query1.fieldbyname("DEMANDAFPONTA");
           //Fechando a conexão:   
           Query1.close();           
           BD.disconnect();
        }
        catch (Exception e){
          ####
        }

esta me retornando o seguinte erro"Exception in thread "main" java.lang.NullPointerException"

sei q na realidade o meu metodo BD.getConexao() esta retornando null.....

mas pq???

as minhas funções estao corretas????

e a forma correta de fazer isso?

to meio enrolado com OO...... :oops:

2 Respostas

RenataFA

Olá!

Na sua classe Conexao.java, no método Conexao(), tem um trecho do código que vc faz:

//Estabelecendo a conexão através do ODBC criado no Painel de Controle: Connection conn = DriverManager.getConnection("jdbc:mysql://"+servidor+":"+porta+"/"+banco,user,senha);
Observe que vc está criando um novo objeto Connection chamado conn e criando a conexão nele! Num objeto que só está declarado dentro deste seu método Conexao().

Ai depois, no seu método:

public Connection getConexao() { return conn; }

Vc está devolvendo o objeto conn que vc criou no início da classe, ou seja, um objeto que não foi modificado! Vc está modificando apenas o objeto conn que está dentro do método Conexao() e tá retornando um outro, que está null!

Espero ter ajudado! :lol:

homisinho

:oops: :oops: :oops: :oops: :oops:
A primeira vista n acreditei no q vi!!!
mas to dando gargalhadas aqui agora!! :lol: :lol: :lol:

valeu RenataFA

iniciante é brabo :!: :!: :!:

Criado 19 de setembro de 2007
Ultima resposta 19 de set. de 2007
Respostas 2
Participantes 2