vou iniciante em java e estou fazendo este sistema para uma escola no momento que chamo o relatório me da este erro.
Se alguem poder me dar uma luz uma dica ficarei muito agradecido.
run:
Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException
at conexoes.ConexaoMySql.executaSql(ConexaoMySql.java:90)
at Autenticacao.ViewiPrincipal.itemPagamentoMensalAuno(ViewiPrincipal.java:646)
at Autenticacao.ViewiPrincipal.jMenuItem2ActionPerformed(ViewiPrincipal.java:639)
at Autenticacao.ViewiPrincipal.access$2600(ViewiPrincipal.java:27)
at Autenticacao.ViewiPrincipal$27.actionPerformed(ViewiPrincipal.java:431)
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.AbstractButton.doClick(AbstractButton.java:376)
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:833)
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:877)
at java.awt.Component.processMouseEvent(Component.java:6533)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6298)
at java.awt.Container.processEvent(Container.java:2236)
at java.awt.Component.dispatchEventImpl(Component.java:4889)
at java.awt.Container.dispatchEventImpl(Container.java:2294)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
at java.awt.Container.dispatchEventImpl(Container.java:2280)
at java.awt.Window.dispatchEventImpl(Window.java:2746)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
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:76)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.awt.EventQueue$4.run(EventQueue.java:729)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
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)
este é o meu codigo.
a linha 90
public void executaSql(String sql) {
try {
statement = con.createStatement(resultSet.TYPE_SCROLL_SENSITIVE,resultSet.CONCUR_READ_ONLY);
resultSet = statement.executeQuery(sql);
} catch (SQLException ex) {
//JOptionPane.showMessageDialog(null,"Não foi possível “+ “executar o comando sql,”+ex+”, o sql passado foi "+sql);
}
}
Onde você inicializou o objeto con
?
iniciei na class de conexão.
vou postar o código.
public class Conecta_Banco {
public Statement stmt;
public ResultSet rs;
public Statement statement;
public ResultSet resultSet;
private String driver = "org.postgresql.Driver";
private String caminho = "jdbc:postgresql://localhost:5432/escola";
private String usuario = "postgres";
private String senha = "17072010";
public Connection conn;
//"jdbc:postgresql://10.0.0.120:5432/escola";
public static Connection conector() {
java.sql.Connection conexao = null;
// a linha abaixo chama o driver
String driver = "org.postgresql.Driver";
//Armazenando informação referente ao banco
String url = "jdbc:postgresql://localhost:5432/escola";
String user = "postgres";
String senha = "17072010";
try {
//Estabelecendo conecxão com o banco
Class.forName(driver);
conexao = DriverManager.getConnection(url, user, senha);
return conexao;
} catch (Exception ex) {
Logger.getLogger(Conecta_Banco.class.getName()).log(Level.SEVERE, null, ex);
return null;
}
}
private Object jlUsuario;
public void abreConexao() {
try {
System.setProperty("jdbc.Drivers", driver);
setConn(DriverManager.getConnection(caminho, usuario, senha));
//JOptionPane.showMessageDialog(null, "Conectado com sucesso!");
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null, "Erro ao conectar!" + ex.getMessage());
//Logger.getLogger(ConexaoSCI.class.getName()).log(Level.SEVERE, null, ex);
}
}
public void fechaConexao() {
try {
getConn().close();
//JOptionPane.showMessageDialog(null,"banco fechado");
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null, "Não foi possivel " + "fechar o banco de dados: " + ex.getMessage());
}
}
public boolean executarSQL(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();
return false;
}
return true;
}
public void executaSql(String sql) {
try {
stmt = conn.createStatement(rs.TYPE_SCROLL_SENSITIVE,rs.CONCUR_READ_ONLY);
rs = stmt.executeQuery(sql);
} catch (SQLException ex) {
//JOptionPane.showMessageDialog(null,"Não foi possível "+ "executar o comando sql,"+ex+", o sql passado foi "+sql);
}
}
public int insertSQL(String pSQL){
int status = 0;
try {
//createStatement de con para criar o Statement
this.setStatement(conn.createStatement());
// Definido o Statement, executamos a query no banco de dados
this.statement.executeUpdate(pSQL);
//consulta o ultimo id inserido
this.setResultSet(this.getStatement().executeQuery("SELECT MAX(id_disciplina) FROM tb_disciplina"));
//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;
}
}
/**
* @return the stmt
*/
public Statement getStmt() {
return stmt;
}
/**
* @param stmt the stmt to set
*/
public void setStmt(Statement stmt) {
this.stmt = stmt;
}
/**
* @return the rs
*/
public ResultSet getRs() {
return rs;
}
/**
* @param rs the rs to set
*/
public void setRs(ResultSet rs) {
this.rs = rs;
}
/**
* @return the conn
*/
public Connection getConn() {
return conn;
}
/**
* @param conn the conn to set
*/
public void setConn(Connection conn) {
this.conn = conn;
}
/**
* @return the statement
*/
public Statement getStatement() {
return statement;
}
/**
* @param statement the statement to set
*/
public void setStatement(Statement statement) {
this.statement = statement;
}
/**
* @return the resultSet
*/
public ResultSet getResultSet() {
return resultSet;
}
/**
* @param resultSet the resultSet to set
*/
public void setResultSet(ResultSet resultSet) {
this.resultSet = resultSet;
}
}
Quando postar código, selecione o mesmo e clique no botão </>
do fórum, senão fica horrível para analisar.
Esse foi o primeiro código que você postou:
public void executaSql(String sql) {
try {
// aqui você tenta chamar um método do objeto 'con'
statement = con.createStatement(resultSet.TYPE_SCROLL_SENSITIVE,resultSet.CONCUR_READ_ONLY);
resultSet = statement.executeQuery(sql);
} catch (SQLException ex) {
//JOptionPane.showMessageDialog(null,"Não foi possível “+ “executar o comando sql,”+ex+”, o sql passado foi "+sql);
}
}
Agora no código novo seu método está assim:
public void executaSql(String sql) {
try {
// agora você tenta chamar um método de um objeto 'conn'
stmt = conn.createStatement(rs.TYPE_SCROLL_SENSITIVE,rs.CONCUR_READ_ONLY);
rs = stmt.executeQuery(sql);
} catch (SQLException ex) {
//JOptionPane.showMessageDialog(null,"Não foi possível "+ "executar o comando sql,"+ex+", o sql passado foi "+sql);
}
}
Entretanto na sua classe Conecta_Banco
não vejo o atributo conn
ser inicializado em lugar nenhum.
Existe um método setConn
, que a meu ver é desnecessário, se esta classe é responsável por criar a conexão, porque ela precisa de um setConn
?
/**
*
* @author André Gouveia
*/
public class Conecta_Banco {
public Statement stmt;
public ResultSet rs;
public Statement statement;
public ResultSet resultSet;
private String driver = "org.postgresql.Driver";
private String caminho = "jdbc:postgresql://localhost:5432/ibscDB"; //"jdbc:postgresql://10.0.0.120:5432/escola"
private String usuario = "postgres";
private String senha = "17072010";
public Connection conn;
//iniciando os objetos
public Conecta_Banco() {
this.rs = rs;
this.stmt = stmt;
this.conn = conn;
}
//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!");
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null, "Erro ao conectar!" + ex.getMessage());
//Logger.getLogger(ConexaoSCI.class.getName()).log(Level.SEVERE, null, ex);
}
}
//fecha conexão com o banco
public void fechaConexao() {
try {
getConn().close();
//JOptionPane.showMessageDialog(null,"banco fechado");
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null, "Não foi possivel " + "fechar o banco de dados: " + ex.getMessage());
}
}
public boolean executarSQL(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();
return false;
}
return true;
}
public void executaSql(String sql) {
try {
stmt = conn.createStatement(rs.TYPE_SCROLL_SENSITIVE, rs.CONCUR_READ_ONLY);
rs = stmt.executeQuery(sql);
} catch (SQLException ex) {
//JOptionPane.showMessageDialog(null,"Não foi possível "+ "executar o comando sql,"+ex+", o sql passado foi "+sql);
}
}
public int insertSQL(String pSQL) {
int status = 0;
try {
//createStatement de con para criar o Statement
this.setStatement(conn.createStatement());
// Definido o Statement, executamos a query no banco de dados
this.statement.executeUpdate(pSQL);
//consulta o ultimo id inserido
this.setResultSet(this.getStatement().executeQuery("SELECT MAX(id_disciplina) FROM tb_disciplina"));
//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;
}
}
/**
* @return the stmt
*/
public Statement getStmt() {
return stmt;
}
/**
* @param stmt the stmt to set
*/
public void setStmt(Statement stmt) {
this.stmt = stmt;
}