Erro na classe DAO

Estou há um tempo tentando resolver o problema de um trabalho que preciso entregar semana que vem. Alguém poderia ajudar? Segue abaixo o código:

Item da lista

package persistencia;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;

import pojo.Descricao;

public class DescricaoDAO {
	private ConexaoJava conexao;
	private final String SQLINSERIR = "INSERT INTO descricao VALUES(null, ?, ?, ?,?)"; 
	private final String SQLALTERAR = "UPDATE descricao SET situacao =?, numero_paginas =?, tamanho =?, id_livros =? WHERE id_descricao = ?";
	private final String SQLDELETAR = "DELETE FROM descricao WHERE id_descricao=?";
	private final String SQLBUSCAR = "SELECT * FROM descricao WHERE id_descricao =?";
	
	public DescricaoDAO() {
		this.conexao = new ConexaoJava("localhost", "integrador","root", "root");
	}
	
	public Descricao inserir(Descricao descricao) { 
		this.conexao.getConexao(); 
		
		try {
			PreparedStatement statement = this.conexao.getConexao().prepareStatement(SQLINSERIR, Statement.RETURN_GENERATED_KEYS);
			statement.setString(1, descricao.getSituacao());
			statement.setInt(2, descricao.getNumero_paginas());
			statement.setString(3, descricao.getTamanho());
			statement.setLong(4, descricao.getId_livros());
			statement.executeUpdate(); 
			ResultSet rs = statement.getGeneratedKeys();
		
			if(rs.next()) {
				descricao.setId_descricao(rs.getLong(1));
			}
			
			JOptionPane.showMessageDialog(null, "executou corretamente");
		} catch (SQLException e) {
			JOptionPane.showMessageDialog(null, "nao executou corretamente");			
			e.printStackTrace();
		} finally {
			this.conexao.fecharConexao();
		}
		
		return descricao; 
	}
	
	public void alterar(Descricao descricao){
		this.conexao.getConexao();
		
		try {
			PreparedStatement ps = this.conexao.getConexao().prepareStatement(SQLALTERAR, Statement.RETURN_GENERATED_KEYS);
			

			ps.setString(1, descricao.getSituacao());
			ps.setInt(2, descricao.getNumero_paginas());
			ps.setString(3, descricao.getTamanho());
			ps.setLong(4, descricao.getId_livros());
			ps.setLong(5, descricao.getId_descricao());
			ps.executeUpdate();
			
			JOptionPane.showMessageDialog(null, "executou corretamente");
		} catch (SQLException e) {
			JOptionPane.showMessageDialog(null, "nao executou corretamente");			
			e.printStackTrace();
		} finally {
			this.conexao.fecharConexao();
		}
	}
	
	public void deletar(Descricao descricao) {
		this.conexao.getConexao();
		
		try {
			PreparedStatement ps = this.conexao.getConexao().prepareStatement(SQLDELETAR, Statement.RETURN_GENERATED_KEYS);
			ps.setLong(1, descricao.getId_descricao());
			ps.executeUpdate();
			
			JOptionPane.showMessageDialog(null, "executou corretamente");
		} catch (SQLException e) {
			JOptionPane.showMessageDialog(null, "nao executou corretamente");			
			e.printStackTrace();
		} finally {
			this.conexao.fecharConexao();
		}
	}
	
	public void buscar(Descricao descricao) {
		this.conexao.getConexao();
		
		try {
			PreparedStatement ps = this.conexao.getConexao().prepareStatement(SQLBUSCAR, Statement.RETURN_GENERATED_KEYS);
			ps.setLong(1, descricao.getId_descricao());
			ps.executeUpdate(); 
			
			JOptionPane.showMessageDialog(null, "executou corretamente");
		} catch (SQLException e) {
			JOptionPane.showMessageDialog(null, "nao executou corretamente");			
			e.printStackTrace();
		} finally {
			this.conexao.fecharConexao();
		}
	}
	
	public List<Descricao> buscarTodos(Descricao descricao) {
		String sqlBuscarTodos = "SELECT * FROM emprestimos "; 
		this.conexao.getConexao();
 		List<Descricao> ListaDescricao = new ArrayList<Descricao>();
 		
 		try {
 			PreparedStatement ps = this.conexao.getConexao().prepareStatement(sqlBuscarTodos);
 			ResultSet rs = ps.executeQuery();
 			
 			while (rs.next()) {
				//livros = new Livros();
				descricao.setId_descricao(rs.getLong("id_descricao"));
				descricao.setSituacao(rs.getString("situação"));
				descricao.setNumero_paginas(rs.getInt("numero_paginas"));
				ListaDescricao.add(descricao);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		return ListaDescricao;
	}
	
	public static void main(String[] args) {
		Descricao desc = new Descricao();
		
		desc.setNumero_paginas(100);
		desc.setSituacao("disponivel");
		desc.setTamanho("20");
		
		DescricaoDAO descDAO = new DescricaoDAO();
		descDAO.inserir(desc);
	}	
}

Fiz o teste que está no final do código que aponta o seguinte erro: " java.lang.NullPointerException" para as seguintes linhas do código:

PreparedStatement statement = this.conexao.getConexao().prepareStatement(SQLINSERIR, Statement.RETURN_GENERATED_KEYS);

e para a linha:

descDAO.inserir(desc);

Quem puder ajudar, desde já agradeço!!!

Posta essa classe aqui.

1 curtida
package persistencia;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import javax.swing.JOptionPane;

public class ConexaoJava {
	
	private Connection conexao;
	private String ip;
	private String bd;
	private String login;
	private String senha;
	
	
	public ConexaoJava(String ip, String bd, String login, String senha) {
		this.ip = ip;
		this.bd = bd;
		this.login = login;
		this.senha = senha;
	}
	
	public Connection getConexao() {
		return this.conexao;
	}
	
	public void abrirConexao() {
		try {
			Class.forName("com.mysql.jdbc.Driver");
			String endereco = "jdbc:mysql://"+this.ip+"/"+this.bd;
			this.conexao = DriverManager.getConnection(endereco,login, senha);
			
			
		} catch (ClassNotFoundException e) {
			JOptionPane.showMessageDialog(null, "erro no driver");
			e.printStackTrace();
		} catch (SQLException se) {
			JOptionPane.showMessageDialog(null, "erro na conexão");
			se.printStackTrace();
		}
	}
	
	
	public void fecharConexao() {
		if(this.conexao!=null) {
			try {
				this.conexao.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
}

No seu código, você chama o método getConexao() sem executar o método abrirConexao antes. Com isso, o atributo conexao ainda estará nulo.

1 curtida

Ok, obrigada pela ajuda!