Java executeSQL("") esta dando erro

12 respostas
I

Bom dia a todos ,
Desde já agradeço atenção de vcs
Estou com um problema aki na empresa onde trabalho utilizamos um banco de dados DBF, que e acessado por um programa Advantage Data Architect, todo mês tenho que tira varios relatórios para entrega ao gerente, estava querendo fazer um programa em Java para deixa no PC do gerente para ele mesmo tira os relatórios, mas ao jogar minha consulta que já tenho feita no Advantage Data Architect me deparei com primeiro problema, dentro do meu executeSQL(??) da muito erros quando jogo esta consula la, será que vcs poderiam me ajudar só novato em programação.

exe da miha consulta :
SELECT Cli.Codigo,
Cli.Nome,
Ped.Data,
Ped.Numero,
NFC.NroNF,
Ped.NroRef,
SUM( ( IP.Quant * IP.PrecoTab ) + IP.ICMSFItem ) AS Valor_Produtos,
SUM (IP.Quant * Round(IP.PrecoTab * (IP.PerDesInc/ 100),2)) AS Desc_Incond,
SUM( (IP.Quant * IP.PrecoTab + IP.ICMSFItem) - ( IP.Quant * Round(IP.PrecoTab * (IP.PerDesInc/ 100),2)) -( IP.Quant * IP.ValorItem + ip.icmsfitem )) as DCC,
SUM( ( IP.Quant * IP.ValorItem ) + ip.icmsfitem ) AS Valor_Pedido
FROM “Pedidos” Ped
INNER JOIN “NFsClientes” NFC ON NFC.Pedido = Ped.Numero
INNER JOIN “Clientes” Cli ON Cli.Codigo = Ped.CodClFo
INNER JOIN “Itens de Pedido” IP ON IP.Numero = Ped.Numero
WHERE Cli.Codigo = ‘00169’ AND Ped.Equipe IN (‘1’) AND
Ped.Data BETWEEN ‘01/04/2009’ AND ‘30/04/2009’ AND
Ped.CodOp IN ( SELECT Op.CodOp FROM “Operações” Op WHERE Op.TipoOp = ‘V’) AND
NOT (PED.CODRET >0 AND PED.NROREF IS NULL)
GROUP BY Cli.Codigo,
Cli.Nome,
Ped.Data,
Ped.Numero,
Ped.NroRef,
NFC.NroNF

Há tentei colocar uma foto aki para melhor análise do problema mas não sei como colocar :!:

12 Respostas

A

Fala ai,

Tenta usar executeQuery(“seu sql”)

[]'s

I

cara tu sabe como faço para manda um print Sreen do erro para vc aki pelo forum?

A

Nem sei… agora eu to no trampo e to meio sem tempo, mas manda o script de criação da base q eu testo e vejo o erro.

Flw

I

Bom esta ai minha classe estou fazendo no netbeans 6.5, quem poder da uma força agradeço

[color=blue]package[/color] Interfaces;

[color=darkblue]import [/color]javax.swing.JOptionPane;

[color=blue]import[/color] utilitarios.Conexao;

[color=blue]public class[/color] Relatorio [color=darkblue]extends[/color][color=blue] [/color] javax.swing.JFrame {
Conexao [color=green]cn[/color] = [color=darkblue]new[/color] Conexao();

[color=darkblue] public[/color] Relatorio() {

initComponents();

[color=green] cn[/color].conecta();

[color=green] cn[/color].executeSQL([color=orange]"SELECT " +

“Cli.Codigo, +

“Cli.Nome, +

“Ped.Data, +

“Ped.Numero, +

“NFC.NroNF, +

“Ped.NroRef, +

“SUM( ( IP.Quant * IP.PrecoTab ) + IP.ICMSFItem  ) AS Valor_Produtos,SUM (IP.Quant * Round(IP.PrecoTab * (IP.PerDesInc/ 100),2)) AS Desc_Incond, " +

“SUM( (IP.Quant * IP.PrecoTab + IP.ICMSFItem) - ( IP.Quant * Round(IP.PrecoTab * (IP.PerDesInc/ 100),2)) -( IP.Quant * IP.ValorItem + ip.icmsfitem )) as DCC,” +

“SUM( ( IP.Quant * IP.ValorItem ) + ip.icmsfitem  ) AS Valor_Pedido " +

“FROM Pedidos Ped” +

“INNER  JOIN NFsClientes NFC ON NFC.Pedido = Ped.Numero” +

“INNER JOIN Clientes Cli ON Cli.Codigo = Ped.CodClFo” +

“INNER JOIN Itens de Pedido IP ON IP.Numero = Ped.Numero” +

“WHERE Cli.Codigo = ‘00169’ AND Ped.Equipe IN (‘1’)  AND +

“Ped.Data BETWEEN ‘01/04/2009’ AND ‘30/04/2009’ AND +

“Ped.CodOp IN ( SELECT Op.CodOp FROM Operações Op WHERE Op.TipoOp = ‘V’) AND +

 NOT (PED.CODRET >0 AND PED.NROREF IS NULL) +

“GROUP BY Cli.Codigo, +

“Cli.Nome, +

“Ped.Data, +

“Ped.Numero, +

“Ped.NroRef, +

“NFC.NroNF” +

“order by ped.numero”[/color]);

[color=blue]try [/color]

{

cn.resultset.first();

//Mostra_dados();

}

[color=blue]catch [/color](Exception erro)

{

JOptionPane.showMessageDialog(null,“Erro tentativa de mostra dados”+ erro);

}

}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
    getContentPane().setLayout(null);

    java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
    setBounds((screenSize.width-800)/2, (screenSize.height-600)/2, 800, 600);
}// </editor-fold>

/**
* @param args the command line arguments
*/
[color=blue]public static void [/color]main(String args[]) {
    java.awt.EventQueue.invokeLater([color=blue]new [/color] Runnable() {
        [color=blue] public void [/color] run() {
            [color=blue]new[/color] Relatorio().setVisible([color=blue]true[/color]);
        }
    });
}

// Variables declaration - do not modify
// End of variables declaration

}

pmlm

cn.executeSQL("SELECT " + "Cli.Codigo," + "Cli.Nome," + "Ped.Data," + "Ped.Numero," + "NFC.NroNF," + "Ped.NroRef," + "SUM( ( IP.Quant * IP.PrecoTab ) + IP.ICMSFItem ) AS Valor_Produtos,SUM (IP.Quant * Round(IP.PrecoTab * (IP.PerDesInc/ 100),2)) AS Desc_Incond, " + "SUM( (IP.Quant * IP.PrecoTab + IP.ICMSFItem) - ( IP.Quant * Round(IP.PrecoTab * (IP.PerDesInc/ 100),2)) -( IP.Quant * IP.ValorItem + ip.icmsfitem )) as DCC," + "SUM( ( IP.Quant * IP.ValorItem ) + ip.icmsfitem ) AS Valor_Pedido " + "FROM Pedidos Ped" + "INNER JOIN NFsClientes NFC ON NFC.Pedido = Ped.Numero" + "INNER JOIN Clientes Cli ON Cli.Codigo = Ped.CodClFo" + "INNER JOIN Itens de Pedido IP ON IP.Numero = Ped.Numero" + "WHERE Cli.Codigo = '00169' AND Ped.Equipe IN ('1') AND" + "Ped.Data BETWEEN '01/04/2009' AND '30/04/2009' AND" + "Ped.CodOp IN ( SELECT Op.CodOp FROM Operações Op WHERE Op.TipoOp = 'V') AND" + " NOT (PED.CODRET >0 AND PED.NROREF IS NULL)" + "GROUP BY Cli.Codigo," + "Cli.Nome," + "Ped.Data," + "Ped.Numero," + "Ped.NroRef," + "NFC.NroNF" + "order by ped.numero");
Faltam espaços em muitas mudanças de linha.

Por exemplo aqui:

"FROM Pedidos Ped" +
"INNER JOIN NFsClientes NFC ON NFC.Pedido = Ped.Numero" +
"INNER JOIN Clientes Cli ON Cli.Codigo = Ped.CodClFo" +

é como se estivesse

Ped está colado a INNER e Numero está colado a INNER.

I

Hum … não tinha me atenda do para os espaços, mas já coloquei o espaços e ainda continua dando o erro, vc tem outra sugestão do que pode ser, to tentado descobri ma sem sucesso

A

Tem como você mandar a classe Conexao ??

pmlm

Os espaços que eu referi não são os únicos, há mais situações iguais nesse SQL. Qual é a mensagem de erro que aparece?

I

Bom eu dei espaços e quase todo que vi que poderia esta nesta situação que vc me falou , mas a questão do erro e uma mensagem da minha classe conxao no método que mostra ai em baixo

[color=blue]public void[/color] executeSQL(String sql)

{

[color=blue]  try[/color]

{

[color=green]statement[/color] =[color=green] conexao[/color].createStatement(

ResultSet.[color=green]TYPE_SCROLL_SENSITIVE[/color] ,ResultSet.[color=green]CONCUR_READ_ONLY[/color] );

[color=green]resultset [/color]= [color=green]statement[/color].executeQuery(sql);

}

[color=blue]  catch[/color](SQLException sqlex)

{

JOptionPane.showMessageDialog([color=blue]null[/color],"Não foi possível “+

“executar o comando sql,”+sqlex+”, o sql passado foi "+sql);

}
}

Sai esta mensagem ai catch que esta no JOptionPane com meu SQL somente isso.
Bom si vcs tiverem interesse posso mandar este projeto que estou fazendo por e-mail e só me passa o e-mail
minha clase conexao esta aki em baixo para melhor entender

[color=blue]package[/color] utilitarios;

[color=blue]import[/color] java.sql.;
[color=blue]import[/color] javax.swing.
;

[color=blue]public class[/color] Conexao

{

[color=blue]final private String driver = sun.jdbc.odbc.JdbcOdbcDriver;
[color=blue]final private[/color] [color=green]String[/color] url =[color=orange] "jdbc:odbc:Ativo .Log"[/color];
  [color=blue] final private[/color]  [color=green]String[/color] usuario = [color=orange]"AdsSys"[/color];
   [color=blue]final private[/color] [color=green] String[/color] senha =[color=orange] ""[/color];
    [color=blue]private[/color] [color=green] Connection[/color] conexao;
   [color=blue] public[/color] [color=green] Statement[/color] statement;
    [color=blue]public[/color] [color=green] ResultSet[/color] resultset;

  [color=blue] public boolean[/color] conecta()
   {
        [color=blue]boolean[/color] result =[color=blue] true[/color];
        [color=blue]try[/color]
        {
            Class.forName([color=green]driver[/color]);
            [color=green]conexao[/color] = DriverManager.getConnection([color=green]url, usuario, senha[/color]);
            JOptionPane.showMessageDialog( [color=blue]null[/color],[color=orange]"conectou !"[/color]);
        }
        [color=blue]catch[/color](ClassNotFoundException Driver)
        {
           JOptionPane.showMessageDialog([color=blue]null[/color],[color=orange]"Driver não localizado: "[/color]+Driver);
           result = false;
        }
         [color=blue]catch[/color](SQLException Fonte)
        {
            JOptionPane.showMessageDialog( [color=blue]null[/color],[color=orange]"Deu erro na conexão "[/color]+
                    [color=orange]"com a fonte de dados: "[/color]+Fonte);
            result =  [color=blue]false[/color];
        }
          [color=blue]return[/color] result;
   }

   public void desconecta()
   {
        boolean result = true;
        try
        {
            conexao.close();
            JOptionPane.showMessageDialog(null,"banco fechado");
        }
        catch(SQLException fecha)
        {
            JOptionPane.showMessageDialog(null,"Não foi possivel "+
                    "fechar o banco de dados: "+fecha);
            result = false;
        }

   }

public void executeQuery(String string) {
    throw new UnsupportedOperationException("Not yet implemented");
}

   public void executeSQL(String sql)
   {
        try
        {
            statement = conexao.createStatement(
                    ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
            resultset = statement.executeQuery(sql);
        }
        catch(SQLException sqlex)
        {
           JOptionPane.showMessageDialog(null,"Não foi possível "+
                   "executar o comando sql,"+sqlex+", o sql passado foi "+sql);
        }

   }

}

A

Tente mudar o seguinte, inicie sua conexao com null;
“private Connection conexao = null;”

o ideal seria voce ter um construtor padrao iniciando suas variaveis de classe.

e no método executeSQL(String sql) coloque o seguinte código:

public void executeSQL(String sql)  {

try {

if (conexao == null) {

this.conecta();

}

PreparedStatement ps = conexao.prepareStatement(sql);

resultset = ps.executeQuery();

} catch(SQLException sqlex) {

JOptionPane.showMessageDialog(null,"Não foi possível executar o comando sql, " + sqlex + ", o sql passado foi " + sql);

}

}

Outra dica, vc ta colocando o código sql duas vezes na mensagem que vai exibir, com um sql do tamanho do seu vai ocupar quase a tela do usuario inteira sem ele entender nada de sql.

Do jeito que eu vi o método ele não ta retornando o resultado da operação, mas você deve ter pensado outra forma de recuperar o retorno da operação.

se não funcionar é só avisar que testo direito, to numa maquina sem o java instalado então foi meio de cabeça.

Flw…

I

Obrigado por esta tentando me ajudar, mudei o código pelo que vc me passo mas não deu certo, estou pensando em mudar isso, meu objetivo e fazer com que o gerente tire o relatório daí pensei em usar o ireport e usar o Java só para ele escolher o código do cliente e o período em que ele deseja, já testei meu SQL no ireport e deu certo só não sei como passa do Java para se informado o código pelo gerente resultando do relatório… oq vc acha?

pmlm
{
               JOptionPane.showMessageDialog(null,"Não foi possível "+
                       "executar o comando sql,"+sqlex+", o sql passado foi "+sql);
            }

Mas e qual é a sqlex apresentada?

Criado 12 de maio de 2009
Ultima resposta 13 de mai. de 2009
Respostas 12
Participantes 3