Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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

Compartilhar este post


Link para o post
Compartilhar em outros 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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa .. então cara o problema é o seguinte... o cara pode digitar 3 valores... 2 valores ou 1 valor para pesquisar... dessa forma que tu falou não vai requisitar os 3 valores?

Compartilhar este post


Link para o post
Compartilhar em outros 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ó??

Compartilhar este post


Link para o post
Compartilhar em outros 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

Compartilhar este post


Link para o post
Compartilhar em outros 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...

Compartilhar este post


Link para o post
Compartilhar em outros 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

Compartilhar este post


Link para o post
Compartilhar em outros 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!

Compartilhar este post


Link para o post
Compartilhar em outros 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

Compartilhar este post


Link para o post
Compartilhar em outros 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...

Compartilhar este post


Link para o post
Compartilhar em outros 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

Compartilhar este post


Link para o post
Compartilhar em outros 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.

Compartilhar este post


Link para o post
Compartilhar em outros 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)

 

Compartilhar este post


Link para o post
Compartilhar em outros 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.

Compartilhar este post


Link para o post
Compartilhar em outros 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..

Compartilhar este post


Link para o post
Compartilhar em outros 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).

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.