Jump to content

Archived

This topic is now archived and is closed to further replies.

TaijovuNeji

[Resolvido] Consulta no banco de dados

Recommended Posts

Olá a todos! ^^

 

Eu faço curso de desenvolvimento de software... e como projeto final temos de fazer um software para uma empresa aqui da minha cidade.

Temos uma grande equipe... eu fiquei com a parte de Consulta de nota fiscal.. algo muito simples de se fazer... porém estou com um grande problema:

 

A pessoa pode fazer a consulta pesquisando por: "Data" , "Número da nota" e "Fornecedor"

 

Se pesquisar por data e numero da nota.. é para retornar valores onde só tem os dados correspondente na pesquisa...se fosse para pesquisar apenas usando um valor eu conseguiria fazer.. mas eu tenho que fazer usando os 3 o.O... se eu fosse fazer usando condições.. eu teria de fazer 9 condições de consulta... mas fica mais facil passando o valor por parametro e eu não sei fazer isso para pesquisar mais de um valor O.O

 

Deu pra entender a minha dúvida? XD...alguém conseguiria me ajudar??? O.o

Share this post


Link to post
Share on other sites

Opa... não sei se entendi direito a tua dǘvida, mas vamos la;

 

Voce vai receber 3 dados a, b e c , se tem que retornar todos os registros que correspondem aos 3; Uma query simples resolve:

SELECT * FROM nome_tabela WHERE nome_campo=a AND nome_campo2=b AND nome_campo3=c;
Nese caso só será retornado todo registro cujo valores dos campos correspondem aos valores a,b e c....

É isso o desejado?? Se não for me corrija e esclareça o q deseja...

 

Espero ter ajudado http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Share this post


Link to post
Share on other sites

Sim desse jeito é quando o cara digita os 3 valores, essa pesquisa pode ficar mais organizada se você botar options( ou RadioButtons ) na tua GUI, e especificar qual deles usar,porque deixa ver se entendi, ele pode botar, 3, 2 ou 1 apenas, vai ser tudo num lugar só??

Share this post


Link to post
Share on other sites

Isso isso... vai ser tudo num lugar só.. tem lah o campo pesquisa.. ele pode colocar os 3 para pesquisar.. ou pesquisar encima soh de 2 valores.. ou de um soh..

 

É por isso que não to conseguindo fazer O.o... eu to pensando em fazer o seguinte.. fazer uma consulta sql para cada condição.. mas ae ia ficar muito complicado pq no total vai dar 9 consultas O.o

Share this post


Link to post
Share on other sites

Cara desse jeito, você vai ter que brincar de adivinhar, porque você nã sabe( e não tem controle sobre isso ) o que ele vai colocar la, se é a, b ou c... A solução seria você melhorar isso ou então ter que pegar o valor do campo pesquisa e tentar buscar fazendo mesmo 3 querys, a que retornar algum valor "talvez" seje a valida e então apresenta como resultado... Nao vejo outra alternativa melhor por enquanto.. Quem souber algo melhor que essa "gambiarra" por favor dê ma dica...

Share this post


Link to post
Share on other sites

Então cara esse é o maior problema.. o cara tem lah 3 campos de pesquisa: Data, Fornecedor e número da nota fiscal Oo.. não tem como eu descobrir qual ele vai escolher para pesquisar e se vai usar 1, 2 ou os 3 campos para pesquisar... eu acho que vo ter q fazer por condições mesmo... tipo assim:

 

if(data!=null and fornecedor== null and numeronota == null{

sql = "SELECT * FROM nota_fiscal WHERE data='"+data'"";

}

 

if(data!=null and fornecedor!= null and numeronota == null{

sql = "SELECT * FROM nota_fiscal WHERE data='"+data+"' and fornecedor='"+fornecedor+'"";

}

 

E assim por diante XD... eu não lembro direito o jeito correto de fazer o comando sql no java.. coloquei isso como exemplo.. mas eu tenho o código no netbeans com um exemplo de como fazer isso XD

 

Será que fazendo condição por condição vai ser o único jeito? Oo.. eu terei que fazer 9 condições O.O

Share this post


Link to post
Share on other sites

Lógica:

 

SQL = "select * from nota_fiscal where (1)";

if (data != null)
  SQL += " AND data="+ variaveldata;

if (fornecedor != null)
  SQL += " AND fornecedor="+ variavelfornecedor;

if (numero != null)
  SQL += " AND numeronota="+ variavelnumeronota;

execute(SQL);

Seja feliz!

Share this post


Link to post
Share on other sites

O formulario é assim:

 

Data:[ TEXTO DE PESQUISA DE DATA ]

Fornecedor: [ TEXTO DE PESQUISA DE FORNECEDOR ]

Numero Nota: [ TEXTO DE PESQUISA DE Nº DA NOTA ]

 

Ou seja.. são 3 campos de pesquisa.. não é soh um não XD

 

E prog.. como você falou não funciona.. pq como eu disse ele pode pesquisar usando os 3 valores.. ou usando 2 .. ou até mesmo soh um valor.. do jeito que tu falou é usando somente um valor...

 

Por exemplo.. se o cara digita data 12/10/2009 e Numero da nota 3 ... ele tem que fazer uma consulta selecionando todo o valor da tabela onde data é igual a 12/10/2009 e o número da nota é igual a 3

Share this post


Link to post
Share on other sites

O formulario é assim:

 

Data:[ TEXTO DE PESQUISA DE DATA ]

Fornecedor: [ TEXTO DE PESQUISA DE FORNECEDOR ]

Numero Nota: [ TEXTO DE PESQUISA DE Nº DA NOTA ]

 

Ou seja.. são 3 campos de pesquisa.. não é soh um não XD

 

E prog.. como você falou não funciona.. pq como eu disse ele pode pesquisar usando os 3 valores.. ou usando 2 .. ou até mesmo soh um valor.. do jeito que tu falou é usando somente um valor...

 

Por exemplo.. se o cara digita data 12/10/2009 e Numero da nota 3 ... ele tem que fazer uma consulta selecionando todo o valor da tabela onde data é igual a 12/10/2009 e o número da nota é igual a 3

 

Então a lógica a ser seguida é a que o Prog colocou aí em cima! A lógica é válida...

Share this post


Link to post
Share on other sites

Nossa.. soh agora que percebi que no código ele tah concatenando a string XD... eu não percebi o sinal de mais antes do igual e por isso eu achei q tava soh atribuindo valor Oo

 

Realmente do jeito que ele falou é muito mais simples.. mas se a pessoa digitar um valor soh... acho que dah pau.. pq não tem o "and" antes se for soh um valor O.o..

 

Putz fazer isso que eu to querendo é complicado d+ O.O

Share this post


Link to post
Share on other sites

Realmente do jeito que ele falou é muito mais simples.. mas se a pessoa digitar um valor soh... acho que dah pau.. pq não tem o "and" antes se for soh um valor O.o..

 

Por isso que no WHERE do SQL eu coloquei (1), desta forma o AND não vai dar pau.

 

SQL = "select * from nota_fiscal where (1)";

Faça o teste e veja os resultados.

Share this post


Link to post
Share on other sites

Bom.. eu tava tentano fazer do meu jeito e deu erro no sql.. ae tentei fazer do seu mas tbm deu erro no código Oo...

 

A pessoa tem que digitar os valores neste formulário:

 

 

Tenho a classe Consulta que cuida desse JFrame.. e soh tem a ação do botão consultar:

 

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
        String data = jTextField1.getText();
        String cnpj = jTextField2.getText();
        String numNota = jTextField3.getText();
       // Integer numNota2 = Integer.parseInt(numNota);
        if (data.isEmpty() && cnpj.isEmpty() && numNota.isEmpty()) {
            JOptionPane.showMessageDialog(this, "Digite um valor válido " +
                    "para pesquisar.", "Erro!!!", 0);
        } else {
            
          ConsultaNota cn=new ConsultaNota();
          cn.consultar(Integer.parseInt(numNota), data, cnpj);

//           jTable1.setValueAt(String.valueOf(cn.consultar(numNota2)),0,0);
        }

A classe ConsultaNota onde tem o método consultar:

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.swing.JOptionPane;

public class ConsultaNota {
public int teste;
    private Conexao bd = null;
    private Connection con = null;
    private PreparedStatement prep = null;
    private ResultSet rs = null;
    private String sql = "select * from nota_fiscal where (1)";

    public int consultar(int numNota2, String data, String cnpj) {

        this.bd = new Conexao();
        this.con = bd.getConexao();

        if(data != null && !data.equals("")){
            sql += " AND data_emissao="+data;
        }
        if(cnpj != null && !cnpj.equals("")){
            sql += " AND fornecedor="+cnpj;
        }
         if(Integer.toString(numNota2) != null && !Integer.toString(numNota2).equals("")){
            sql += " AND numero_nota="+numNota2;
        }
//        if (Integer.toString(numNota2) != null && (data == null || data.equals("")) && (cnpj == null || cnpj.equals(""))) {
//            sql = "SELECT * FROM nota_fiscal WHERE numero_nota= " + numNota2 + ";";
//        }
//
//        if (Integer.toString(numNota2) != null && (data != null || !data.equals("")) && (cnpj == null || cnpj.equals(""))) {
//            sql = "SELECT * FROM nota_fiscal WHERE numero_nota= " + numNota2 +
//                    ",data_emissao = '" + data + "';";
//        }
//
//        if (Integer.toString(numNota2) != null && (data != null || !data.equals("")) && (cnpj != null || !cnpj.equals(""))) {
//            sql = "SELECT * FROM nota_fiscal WHERE numero_nota= " + numNota2 +
//                    ",data_emissao = '" + data + "', fornecedor ='" + cnpj + "';";
//        }
//
//        if (Integer.toString(numNota2) == null && (data != null || !data.equals("")) && (cnpj == null || cnpj.equals(""))) {
//            sql = "SELECT * FROM nota_fiscal WHERE data_emissao = '" + data + "';";
//        }
//
//
//        if (Integer.toString(numNota2) == null && (data == null || data.equals("")) && (cnpj != null || !cnpj.equals(""))) {
//            sql = "SELECT * FROM nota_fiscal WHERE fornecedor ='" + cnpj + "';";
//        }
//
//        if (Integer.toString(numNota2) == null && (data != null || !data.equals("")) && (cnpj != null || !cnpj.equals(""))) {
//            sql = "SELECT * FROM nota_fiscal WHERE data_emissao = '" + data + "', fornecedor ='" + cnpj + "';";
//        }
//
//        if (Integer.toString(numNota2) != null && (data == null || data.equals("")) && (cnpj != null || !cnpj.equals(""))) {
//            sql = "SELECT * FROM nota_fiscal WHERE numero_nota= " + numNota2 + ", fornecedor ='" + cnpj + "';";
//        }

        try {
            prep = con.prepareStatement(sql);
            rs = prep.executeQuery(sql);

            if (rs.equals(null)) {
                JOptionPane.showMessageDialog(null, "Dados não econtrados!", "Erro", 0);
            } else {
                while (rs.next()) {
                    rs.getInt("codigo");
                    rs.getInt("numero_nota");
                    rs.getString("data_emissao");
                    rs.getString("fornecedor");


                }
            }

        } catch (SQLException sqle) {
            System.out.println("Erro de banco de dados " + sqle.getMessage());
        }
        return teste;
    }
}
Pode ver que nesta classe tentei usar o teu jeito e o meu.. mas nenhum deu certo Oo... eu não sei nem jogar os dados da Classe ConsultaNota para o JFrame Oo.. mas nem a consulta to conseguindo fazer O.O

 

Alguém pode me dah uma luz do que eu devo fazer? O.o.. eu jah tentei de tudo

 

Esse é o erro que dá:

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: ""

at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)

at java.lang.Integer.parseInt(Integer.java:468)

at java.lang.Integer.parseInt(Integer.java:497)

at Consulta.Consulta.jButton1ActionPerformed(Consulta.java:219)

at Consulta.Consulta.access$700(Consulta.java:22)

at Consulta.Consulta$7.actionPerformed(Consulta.java:154)

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:6038)

at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)

at java.awt.Component.processEvent(Component.java:5803)

at java.awt.Container.processEvent(Container.java:2058)

at java.awt.Component.dispatchEventImpl(Component.java:4410)

at java.awt.Container.dispatchEventImpl(Container.java:2116)

at java.awt.Component.dispatchEvent(Component.java:4240)

at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)

at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)

at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)

at java.awt.Container.dispatchEventImpl(Container.java:2102)

at java.awt.Window.dispatchEventImpl(Window.java:2429)

at java.awt.Component.dispatchEvent(Component.java:4240)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)

at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)

at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

 

Share this post


Link to post
Share on other sites

Eu fiz apenas um exemplo... Você deve adaptá-lo ao seu sistema.

 

De acordo com a mensagem do erro há algum caractere inválido ou esta faltando fazer algum parse em algum número.

Share this post


Link to post
Share on other sites

Mas eu adaptei ao meu código.. eu modifiquei o seu:

 

if(data != null && !data.equals("")){            sql += " AND data_emissao="+data;        }        if(cnpj != null && !cnpj.equals("")){            sql += " AND fornecedor="+cnpj;        }         if(Integer.toString(numNota2) != null && !Integer.toString(numNota2).equals("")){            sql += " AND numero_nota="+numNota2;        }

 

Mas então cara.. eu to soh testando essas condições .. e nelas tah dando esse pau..

Share this post


Link to post
Share on other sites

Seu problema esta nesta parte do código:

 

cn.consultar(Integer.parseInt(numNota), data, cnpj);

Mais especificamente:

 

Integer.parseInt(numNota)

Se não houver nenhum valor para a variável numNota (em branco), vai gerar exceção.

Ou seja, você deve tratar com IFs (mais fácil) ou criar outra modelagem para suas classes (mais lógico).

Share this post


Link to post
Share on other sites

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.