Erro com SQL

14 respostas
lionbtt

Boa tarde galera, Estou com um problema de banco de dados e JAVA.
O banco de dados eh o firebirde e eu queria Pegar o maio valor de um campo do banco de dados mas não esta dando certo. Eu coloquei dentro de um botão pra testar mas não ta dando certo.

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
         try
         {
            
            sqlF = "SELECT MAX(ft_potencia) FROM FATURAMENTO";
            Conexao_Faturamento.execsqlMAX(sqlF);
            JOptionPane.showMessageDialog(null,"o resultado eh"+Conexao_Faturamento.RS.getDouble(0));
         }
         catch(SQLException erro){
          JOptionPane.showMessageDialog(null, "Erro na tentativa de excluir o registro!"+erro);
     }
    }

e da os seguintes erros.

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at Controlador.Controle.jButton1ActionPerformed(Controle.java:650)
at Controlador.Controle.access$900(Controle.java:21)
at Controlador.Controle$10.actionPerformed(Controle.java:196)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6263)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6028)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4630)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2475)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

Se puderem me ajudar...Obrigado galera.

14 Respostas

lina

Oi,

O unico lugar que pode estar nulo nesta codificação é ao utiliza a variavel Conexao_Faturamento;

Essa variavel b[/b] já está criada? ( != null) ?

Bem vindo ao Guj!

Tchauzin!

lionbtt

lina:
Oi,

O unico lugar que pode estar nulo nesta codificação é ao utiliza a variavel Conexao_Faturamento;

Essa variavel b[/b] já está criada? ( != null) ?

Bem vindo ao Guj!

Tchauzin!

Sim jah esta criada. mesmo assim coninua dando erro…

lina

Oi,

Então, provavelmente o problema está dentro da função execsqlMAX(sqlF);

Coloque este código…

Tchauzin!

robinsonbsilva

Jovem,

Antes de tentar percorrer o cursor, faça uma validação para ver se o resultset retornou algo…mesmo sendo o Max;

if(rs.next()){ //onde rs = resultset
    JOptionPane.showMessageDialog(null,"o resultado eh"+Conexao_Faturamento.RS.getDouble(0));
}
lionbtt

lina:
Oi,

Então, provavelmente o problema está dentro da função execsqlMAX(sqlF);

Coloque este código…

Tchauzin!

public void execsqlMAX (String sql)
     {
       try
       {
           statement = conexao.createStatement();
           //ResultSet = statement.executeQuery(sql);
           RS = statement.executeQuery(sql);

       }
       catch(SQLException esqlex)
       {
          JOptionPane.showMessageDialog(null, "Ocorreu o seguinte erro SQL:"+esqlex.getMessage());
       }
     }

Ai esta o codigo…Desde jah agradeço.

lina

Oi,

Também não vi nada que daria NullPointer.

Comente a linha:

JOptionPane.showMessageDialog(null,"o resultado eh"+Conexao_Faturamento.RS.getDouble(0));

E rode o programa.

Tchauzin!

robinsonbsilva

Senhores(rita)!

Alguns BD’s ao usar funções de agrupamento, por exemplo SUM(coluna)… não retornam nehuma linha quando a tabela está vazia!
No SQL Server 2005 tenho que fazer o seguinte para resolver tal problema:

StringBuffer sql = new StringBuffer("");
sql.append("SELECT ISNULL(MAX(coluna), 0 ) + 1 FROM table");

essa instrução SQL quando executada fora do Java funciona??(só para eliminar as possibilidades)

lionbtt

robinsonbsilva:
Senhores(rita)!

Alguns BD’s ao usar funções de agrupamento, por exemplo SUM(coluna)… não retornam nehuma linha quando a tabela está vazia!
No SQL Server 2005 tenho que fazer o seguinte para resolver tal problema:

StringBuffer sql = new StringBuffer("");
sql.append("SELECT ISNULL(MAX(coluna), 0 ) + 1 FROM table");

essa instrução SQL quando executada fora do Java funciona??(só para eliminar as possibilidades)

Funciona sim… executo no IBO console e me retorna o valor corretamente,

lionbtt

lina:
Oi,

Também não vi nada que daria NullPointer.

Comente a linha:

JOptionPane.showMessageDialog(null,"o resultado eh"+Conexao_Faturamento.RS.getDouble(0));

E rode o programa.

Tchauzin!

Oi… Comentei a linha e nao apareceu nenhum erro. O problema está nessa linha

robinsonbsilva

Desculpe até se parecer “besta”,

Mas a aplicação está conectando ao BD??
Faz um teste em seu método

public void execsqlMAX (String sql)
     {
       try
       {
           statement = conexao.createStatement();
           //ResultSet = statement.executeQuery(sql);
           RS = statement.executeQuery(sql);
           if(rs.next()){ //onde rs = resultset   
                      JOptionPane.showMessageDialog(null,"o resultado eh"+ RS.getDouble(0) );   
           }  
       }
       catch(SQLException esqlex)
       {
          JOptionPane.showMessageDialog(null, "Ocorreu o seguinte erro SQL:"+esqlex.getMessage());
       }
     }
lionbtt

robinsonbsilva:
Desculpe até se parecer “besta”,

Mas a aplicação está conectando ao BD??
Faz um teste em seu método

public void execsqlMAX (String sql) { try { statement = conexao.createStatement(); //ResultSet = statement.executeQuery(sql); RS = statement.executeQuery(sql); if(rs.next()){ //onde rs = resultset JOptionPane.showMessageDialog(null,"o resultado eh"+Conexao_Faturamento.RS.getDouble(0)); } } catch(SQLException esqlex) { JOptionPane.showMessageDialog(null, "Ocorreu o seguinte erro SQL:"+esqlex.getMessage()); } }

Tah sim. To conseguindo editar, alterar e excluir os registros menos recuperar o maior =/

pmlm

Mas é RS ou rs?

lionbtt

pmlm:
lionbtt:

RS = statement.executeQuery(sql);
if(rs.next()){ //onde rs = resultset

Mas é RS ou rs?

É RS, nesse if eu substitui por RS, mas mesmo assim… ainda nada.

lina

Oi,

Então.. já matamos o erro. Eu faria da seguinte maneira.:

public void execsqlMAX (String sql)
     {
       try
       {
           statement = conexao.createStatement();
           //ResultSet = statement.executeQuery(sql);
           if ((RS = statement.executeQuery(sql) != null) {
                 
                    if(RS.next()){ //onde rs = resultset   
                            JOptionPane.showMessageDialog(null,"o resultado eh"+Conexao_Faturamento.RS.getDouble(0));   
                    }
                    else {
                            JOptionPane.showMessageDialog(null,"Não retornou nada no ResulSet");   
                   }
           }
           else {
                  JOptionPane.showMessageDialog(null,"O Resultado do ResultSet eh nulo");   
           }
       }
       catch(SQLException esqlex)
       {
          JOptionPane.showMessageDialog(null, "Ocorreu o seguinte erro SQL:"+esqlex.getMessage());
       }
     }

Tchauzin!

Criado 4 de setembro de 2009
Ultima resposta 4 de set. de 2009
Respostas 14
Participantes 4