Boa tarde precisando da ajuda de vcs, quando executo o botão para impressão do relatorio me da este erro me ajudem por favor.
run:
java.lang.NullPointerException
at conexoes.ConexaoMySql.executarSQL(ConexaoMySql.java:127)
at relatorios.DAORelatorios.gerarRelatorioFuncionario(DAORelatorios.java:86)
at controller.ControllerFuncionario.gerarRelatorioFuncionario(ControllerFuncionario.java:91)
at view.ViewFuncionario.bt_imprimir_ficha_funcionarioActionPerformed(ViewFuncionario.java:930)
at view.ViewFuncionario.access$400(ViewFuncionario.java:35)
at view.ViewFuncionario$6.actionPerformed(ViewFuncionario.java:306)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289)
at java.awt.Component.processMouseEvent(Component.java:6539)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6304)
at java.awt.Container.processEvent(Container.java:2239)
at java.awt.Component.dispatchEventImpl(Component.java:4889)
at java.awt.Container.dispatchEventImpl(Container.java:2297)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4476)
at java.awt.Container.dispatchEventImpl(Container.java:2283)
at java.awt.Window.dispatchEventImpl(Window.java:2746)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)
at java.awt.EventQueue$4.run(EventQueue.java:733)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:730)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
CONSTRUÍDO COM SUCESSO (tempo total: 19 segundos)
**classe de conexão:**
package conexoes;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JOptionPane;
/**
*
* @author Andre Gouveia
*/
public class ConexaoMySql {
private boolean status = false;
private String mensagem = ""; //variavel que vai informar o status da conexao
public Connection con = null; //variavel para conexao this.con = Conexao.getCon();
public Statement statement;
public ResultSet resultSet;
public Connection conn;
private String servidor = "127.0.01";
private String driver = "com.mysql.jdbc.Driver";
private String caminho = "jdbc:mysql://localhost/gestaoescolar"; //"jdbc:postgresql://192.168.1.110:5432/escola";
private String nomeDoBanco = "gestaoescolar";
private String usuario = "root";
private String senha = "afnl@1234";
public ConexaoMySql() {
}
public ConexaoMySql(String pServidor, String pNomeDoBanco, String pUsuario, String pSenha) {
this.servidor = pServidor;
this.nomeDoBanco = pNomeDoBanco;
this.usuario = pUsuario;
this.senha = pSenha;
}
public static Connection getConexao() throws SQLException {
try {
Class.forName("com.mysql.jdbc.Driver");
System.out.println("Conectando ao banco de dados.");
return DriverManager.getConnection("jdbc:mysql://localhost/gestaoescolar", "root", "afnl@1234");
} catch (ClassNotFoundException e) {
throw new SQLException(e.getMessage());
}
}
//abre conexão com o banco
public void abreConexao() {
try {
System.setProperty("jdbc.Drivers", driver);
setConn(DriverManager.getConnection(caminho, usuario, senha));
//JOptionPane.showMessageDialog(null, "Conectado com sucesso!");
//System.out.println(getCon());
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null, "Erro ao conectar!" + ex.getMessage());
//Logger.getLogger(ConexaoSCI.class.getName()).log(Level.SEVERE, null, ex);
}
}
private String url = "jdbc:mysql://127.0.01/gestaoescolar?user=root&password=afnl@1234";
public Connection abrirConexao(){
try{
Class.forName("com.mysql.jdbc.Driver").newInstance();
conn = DriverManager.getConnection(url);
System.out.println("Conexao com Banco de Dados estabelecida.");
//System.out.println(getCon());
}
catch (SQLException erroSQL) {
System.out.println("Erro na conexão com o Banco "+erroSQL.getMessage());
}
catch (ClassNotFoundException erroClass){
System.out.println("Erro ao carregar o Driver "+erroClass.getMessage());
}
catch (Exception e){
System.out.println("Ocoreru um erro: "+e.getMessage());
}
return conn;
}
/**
* Abre uma conexao com o banco
*
* @return Connection
*/
public Connection conectar() {
try {
//Driver do PostgreSQL
Class.forName("com.mysql.jdbc.Driver").newInstance();
//local do banco, nome do banco, usuario e senha
String url = "jdbc:mysql://" + servidor + "/" + nomeDoBanco;
this.setCon((Connection) DriverManager.getConnection(url, usuario, senha));
//se ocorrer tudo bem, ou seja, se conectar a linha a segui é executada
this.status = true;
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | SQLException e) {
JOptionPane.showMessageDialog(null, e.getMessage());
}
return this.getCon();
}
public void executaSQL(String pSQL) {
try {
//createStatement de con para criar o Statement
this.setStatement(getConn().createStatement());
// Definido o Statement, executamos a query no banco de dados
this.setResultSet(getStatement().executeQuery(pSQL));
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null, ex.getMessage());
ex.printStackTrace();
}
}
/**
* Executa consultas SQL
*
* @param pSQL
* @return int
*/
public boolean executarSQL(String pSQL) {
try {
//createStatement de con para criar o Statement
this.setStatement(getCon().createStatement());
// Definido o Statement, executamos a query no banco de dados
this.setResultSet(getStatement().executeQuery(pSQL));
//System.out.println(getCon());
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null, ex.getMessage());
//System.out.println(getCon());
ex.printStackTrace();
return false;
}
return true;
}
public boolean executarUpdateDeleteSQL(String pSQL) {
try {
//createStatement de con para criar o Statement
this.setStatement(getCon().createStatement());
// Definido o Statement, executamos a query no banco de dados
getStatement().executeUpdate(pSQL);
} catch (SQLException ex) {
ex.printStackTrace();
return false;
}
return true;
}
/**
* Executa insert SQL
*
* @param pSQL
* @return boolean
*/
public int insertSQL(String pSQL) {
int status = 0;
try {
//createStatement de con para criar o Statement
this.setStatement(getCon().createStatement());
// Definido o Statement, executamos a query no banco de dados
this.getStatement().executeUpdate(pSQL);
//consulta o ultimo id inserido
this.setResultSet(this.getStatement().executeQuery("SELECT last_insert_id();"));
//recupera o ultimo id inserido
while (this.resultSet.next()) {
status = this.resultSet.getInt(1);
}
//retorna o ultimo id inserido
return status;
} catch (SQLException ex) {
ex.printStackTrace();
return status;
}
}
/**
* encerra a conexão corrente
*
* @return boolean
*/
public boolean fecharConexao() {
try {
if ((this.getResultSet() != null) && (this.statement != null)) {
this.getResultSet().close();
this.statement.close();
}
this.getCon().close();
return true;
} catch (SQLException e) {
JOptionPane.showMessageDialog(null, "Erro ao desconectar!!! " + e.getMessage());
}
return false;
}
/**
* encerra a conexão corrente
*
*/
public void Desconectar() {
if ((this.resultSet != null) && (this.statement != null)) {
try {
this.resultSet.close();
this.statement.close();
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null, "Erro ao desconectar!!!" + ex.getMessage());
}
}
}
/**
* @return the status
*/
public boolean isStatus() {
return this.status;
}
/**
* @return the mensagem
*/
public String getMensagem() {
return mensagem;
}
/**
* @return the statement
*/
public Statement getStatement() {
return statement;
}
/**
* @return the resultSet
*/
public ResultSet getResultSet() {
return resultSet;
}
/**
* @param mensagem the mensagem to set
*/
public void setMensagem(String mensagem) {
this.mensagem = mensagem;
}
/**
* @return the con
*/
public Connection getCon() {
return con;
}
/**
* @param con the con to set
*/
public void setCon(Connection con) {
this.con = con;
}
/**
* @param statement the statement to set
*/
public void setStatement(Statement statement) {
this.statement = statement;
}
/**
* @param resultSet the resultSet to set
*/
public void setResultSet(ResultSet resultSet) {
this.resultSet = resultSet;
}
/**
* @return the servidor
*/
public String getServidor() {
return servidor;
}
/**
* @param servidor the servidor to set
*/
public void setServidor(String servidor) {
this.servidor = servidor;
}
/**
* @return the nomeDoBanco
*/
public String getNomeDoBanco() {
return nomeDoBanco;
}
/**
* @param nomeDoBanco the nomeDoBanco to set
*/
public void setNomeDoBanco(String nomeDoBanco) {
this.nomeDoBanco = nomeDoBanco;
}
/**
* @return the usuario
*/
public String getUsuario() {
return usuario;
}
/**
* @param usuario the usuario to set
*/
public void setUsuario(String usuario) {
this.usuario = usuario;
}
/**
* @return the senha
*/
public String getSenha() {
return senha;
}
/**
* @param senha the senha to set
*/
public void setSenha(String senha) {
this.senha = senha;
}
/**
* @return the conn
*/
public Connection getConn() {
return conn;
}
/**
* @param conn the conn to set
*/
public void setConn(Connection conn) {
this.conn = conn;
}
}
oq tem nessa linha?
tem isto na linha 127 -
//createStatement de con para criar o Statement
this.setStatement(getCon().createStatement());
Acredito que o getCon() esta null, mas não consegui resolver, tem como me dar uma luz.
try {
//Driver do PostgreSQL
Class.forName("com.mysql.jdbc.Driver").newInstance();
//local do banco, nome do banco, usuario e senha
String url = "jdbc:mysql://" + servidor + "/" + nomeDoBanco;
this.setCon((Connection) DriverManager.getConnection(url, usuario, senha));
//se ocorrer tudo bem, ou seja, se conectar a linha a segui é executada
this.status = true;
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | SQLException e) {
JOptionPane.showMessageDialog(null, e.getMessage());
}
return this.getCon();
}`
return this.setCon();
tenta colocar a linha getCon()
como finally
, assim mesmo que não ocorra a conexão, ele vai retornar o status, e não vai permanecer null
. nesse método você tentou a conexão, se der certo ele da um valor ao con
e retorna o con
, mas e se não conectar? ele continua null
, ai toda vez que você chamar esse valor vai dar NullPointerException
Você já tem o método getConexao()
que retorna uma Connection
e é estático, então eu não entendi a necessidade de alguns métodos aí.
Se você estiver usando o MySQL 8, o driver é esse: com.mysql.cj.jdbc.Driver
. Em setConn:
você não registrou o Driver como fez em getConexao()
:
Class.forName("com.mysql.jdbc.Driver");