[RESOLVIDO] ajuda urgente (java + mysql)

26 respostas
D

bom Dia

Pessoal, não sei se eu postei no lugar correto, preciso de uma ajuda urgente para fechar um projeto escolar, preciso saber como informar um codigo de um fornecedor, e associar ao produto, não precisa estar gravndo no banco mais na tela do produto teria que puxar, e na tela de pedido, colocar o codigo do produto e ele puxar o nome e o valor.

os codigos que eu tenteipara realizar essa operação, foram os abaixos, porem esta retornando erro de instrução do sql… alguem pode me ajudar por favor:

classe fornecedorDAO

package Principal;   
  
import java.sql.PreparedStatement;   
import java.sql.ResultSet;   
import java.sql.SQLException;   
import java.util.logging.Level;   
import java.util.logging.Logger;   
import principal.ConnectionFactory;   
import principal.Fornecedor;   
  
/**  
 *  
 * @author Douglas  
 */  
public class FornecedorDAO {   
  
    public FornecedorDAO() {   
    }   
       
    public int Inserir (Fornecedor fornecedor) {   
     int qtd = 0;   
        
               
     String sql = "insert into fornecedor (NomeFornecedor,CNPJ,TelFornecedor,EndFornecedor,CidadeFornecedor,UfFornecedor) "  
                      + "values (?,?,?,?,?,?)";   
        
     try {   
        
          PreparedStatement pmst = ConnectionFactory.getConnection().prepareStatement(sql);   
        
       pmst.setString (1,fornecedor.getNomeFornecedor());   
       pmst.setString (2,fornecedor.getCNPJ());   
       pmst.setString (3,fornecedor.getTelFornecedor());   
       pmst.setString (4,fornecedor.getEndFornecedor());   
       pmst.setString (5,fornecedor.getCidadeFornecedor());   
       pmst.setString (6,fornecedor.getUfFornecedor());   
           
       qtd = pmst.executeUpdate();   
          
          
          
     } catch (SQLException ex) {   
         Logger.getLogger(FornecedorDAO.class.getName()).log(Level.SEVERE, null, ex);   
     }   
        
        
     return qtd;   
        
        
        
    }   
     public Fornecedor Consultar (int CodFornecedor){   
        String sql = "Select NomeFornecedor from Fornecedor"  
                      + "where CodFornecedor = ?";   
     try {      
        PreparedStatement pmst = ConnectionFactory.getConnection().prepareStatement(sql);   
        
       pmst.setInt(1,CodFornecedor);   
          
  
       
       ResultSet rs = pmst.executeQuery();   
          
       if (rs.next()) {   
           Fornecedor fornecedor = new Fornecedor();   
           fornecedor.setNomeFornecedor(rs.getString("NomeFornecedor"));   
              
           rs.close();   
              
           return fornecedor;   
              
       }   
          
        
     }catch (SQLException ex){   
         Logger.getLogger(principal.ProdutoDAO.class.getName()).log(Level.SEVERE, null, ex);   
              
     }   
        return null;   
     }      
       
       
}
package Principal;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import principal.ConnectionFactory;
import principal.Fornecedor;

/**
 *
 * @author Douglas
 */
public class FornecedorDAO {

    public FornecedorDAO() {
    }
    
    public int Inserir (Fornecedor fornecedor) {
     int qtd = 0;
     
            
     String sql = "insert into fornecedor (NomeFornecedor,CNPJ,TelFornecedor,EndFornecedor,CidadeFornecedor,UfFornecedor) "
                      + "values (?,?,?,?,?,?)";
     
     try {
     
          PreparedStatement pmst = ConnectionFactory.getConnection().prepareStatement(sql);
     
       pmst.setString (1,fornecedor.getNomeFornecedor());
       pmst.setString (2,fornecedor.getCNPJ());
       pmst.setString (3,fornecedor.getTelFornecedor());
       pmst.setString (4,fornecedor.getEndFornecedor());
       pmst.setString (5,fornecedor.getCidadeFornecedor());
       pmst.setString (6,fornecedor.getUfFornecedor());
        
       qtd = pmst.executeUpdate();
       
       
       
     } catch (SQLException ex) {
         Logger.getLogger(FornecedorDAO.class.getName()).log(Level.SEVERE, null, ex);
     }
     
     
     return qtd;
     
     
     
    }
     public Fornecedor Consultar (int CodFornecedor){
        String sql = "Select NomeFornecedor from Fornecedor"
                      + "where CodFornecedor = ?";
     try {   
        PreparedStatement pmst = ConnectionFactory.getConnection().prepareStatement(sql);
     
       pmst.setInt(1,CodFornecedor);
       

    
       ResultSet rs = pmst.executeQuery();
       
       if (rs.next()) {
           Fornecedor fornecedor = new Fornecedor();
           fornecedor.setNomeFornecedor(rs.getString("NomeFornecedor"));
           
           rs.close();
           
           return fornecedor;
           
       }
       
     
     }catch (SQLException ex){
         Logger.getLogger(principal.ProdutoDAO.class.getName()).log(Level.SEVERE, null, ex);
           
     }
        return null;
     }   
    
    
}

A parte que chamaria o nome do fornecedor da tela do produto seria

private void jTextCodFornecedorProdutoActionPerformed(java.awt.event.ActionEvent evt) {                                                             
        Fornecedor fornecedor = new Fornecedor();   
        FornecedorDAO fornecedorDAO = new FornecedorDAO();   
           
        fornecedor = fornecedorDAO.Consultar(Integer.parseInt(jTextCodFornecedorProduto.getText()));   
           
           
        if (fornecedor == null){   
            jTextNomeFornecedor1.setText("Sem fornecedor registrado");          
               
               
        }else {   
            jTextNomeFornecedor1.setText(fornecedor.getNomeFornecedor());   
        }   
  
    }  
   private void jTextCodFornecedorProdutoActionPerformed(java.awt.event.ActionEvent evt) {                                                          
        Fornecedor fornecedor = new Fornecedor();
        FornecedorDAO fornecedorDAO = new FornecedorDAO();
        
        fornecedor = fornecedorDAO.Consultar(Integer.parseInt(jTextCodFornecedorProduto.getText()));
        
        
        if (fornecedor == null){
            jTextNomeFornecedor1.setText("Sem fornecedor registrado");       
            
            
        }else {
            jTextNomeFornecedor1.setText(fornecedor.getNomeFornecedor());
        }

    }

Na tela do produto seria a mesma coisa mas ao colocar o numero e dar enter, ele adicionaria o nome e valor do produto e limparia o campo para informar o codigo novamente sem prejudicar os demais campos e ir adicionando no campoo segue os códigos, mas o codigo para fazer isso eu não consegui desenvolver segue:

package principal;   
  
import java.sql.PreparedStatement;   
import java.sql.ResultSet;   
import java.sql.SQLException;   
import java.util.logging.Level;   
import java.util.logging.Logger;   
  
/**  
 *  
 * @author Douglas  
 */  
public class ProdutoDAO {   
       
    public ProdutoDAO() {   
       
    }   
       
    public int Inserir (Produto produto){   
        int qtd = 0;   
           
        String sql = "insert into produto (Marca,NomeProduto,UnidadeMedidaProduto,NomeDivisao,NOriginalProduto,DecProduto,Despesa,NParaleloProduto,GrupoDespProduto,ValorProduto)"  
                                            + "values (?,?,?,?,?,?,?,?,?,?)";   
     try {      
        PreparedStatement pmst = ConnectionFactory.getConnection().prepareStatement(sql);   
        
       pmst.setString (1,produto.getMarca());   
       pmst.setString (2,produto.getNomeProduto());   
       pmst.setString (3,produto.getUnidadeMedidaProduto());   
       pmst.setString (4,produto.getNomedivisao());   
       pmst.setString (5,produto.getNOriginalProduto());   
       pmst.setString (6,produto.getDecProduto());   
       pmst.setString (7,produto.getDespesa());   
       pmst.setString (8,produto.getNParaleloProduto());   
       pmst.setString (9,produto.getGrupoDespProduto());   
       pmst.setString (10,produto.getValorProduto());   
          
  
       
       qtd = pmst.executeUpdate();   
        
     }catch (SQLException ex){   
         Logger.getLogger(ProdutoDAO.class.getName()).log(Level.SEVERE, null, ex);   
              
     }   
        return qtd;   
    }   
       
    public Produto Consultar (int CodProduto){   
        String sql = "Select Nomeproduto,ValorProduto from Fornecedor"  
                      + "where CodProduto = ?";   
     try {      
        PreparedStatement pmst = ConnectionFactory.getConnection().prepareStatement(sql);   
        
       pmst.setInt(1,CodProduto);   
          
  
       
       ResultSet rs = pmst.executeQuery();   
          
       if (rs.next()) {   
           Produto produto = new Produto();   
           produto.setNomeProduto(rs.getString("NomeProduto"));   
           produto.setValorProduto(rs.getString("ValorProduto"));   
              
           rs.close();   
              
           return produto;   
              
       }   
          
        
     }catch (SQLException ex){   
         Logger.getLogger(principal.ProdutoDAO.class.getName()).log(Level.SEVERE, null, ex);   
              
     }   
        return null;   
     }      
       
       
}
package principal;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Douglas
 */
public class ProdutoDAO {
    
    public ProdutoDAO() {
    
    }
    
    public int Inserir (Produto produto){
        int qtd = 0;
        
        String sql = "insert into produto (Marca,NomeProduto,UnidadeMedidaProduto,NomeDivisao,NOriginalProduto,DecProduto,Despesa,NParaleloProduto,GrupoDespProduto,ValorProduto)"
                                            + "values (?,?,?,?,?,?,?,?,?,?)";
     try {   
        PreparedStatement pmst = ConnectionFactory.getConnection().prepareStatement(sql);
     
       pmst.setString (1,produto.getMarca());
       pmst.setString (2,produto.getNomeProduto());
       pmst.setString (3,produto.getUnidadeMedidaProduto());
       pmst.setString (4,produto.getNomedivisao());
       pmst.setString (5,produto.getNOriginalProduto());
       pmst.setString (6,produto.getDecProduto());
       pmst.setString (7,produto.getDespesa());
       pmst.setString (8,produto.getNParaleloProduto());
       pmst.setString (9,produto.getGrupoDespProduto());
       pmst.setString (10,produto.getValorProduto());
       

    
       qtd = pmst.executeUpdate();
     
     }catch (SQLException ex){
         Logger.getLogger(ProdutoDAO.class.getName()).log(Level.SEVERE, null, ex);
           
     }
        return qtd;
    }
    
    public Produto Consultar (int CodProduto){
        String sql = "Select Nomeproduto,ValorProduto from Fornecedor"
                      + "where CodProduto = ?";
     try {   
        PreparedStatement pmst = ConnectionFactory.getConnection().prepareStatement(sql);
     
       pmst.setInt(1,CodProduto);
       

    
       ResultSet rs = pmst.executeQuery();
       
       if (rs.next()) {
           Produto produto = new Produto();
           produto.setNomeProduto(rs.getString("NomeProduto"));
           produto.setValorProduto(rs.getString("ValorProduto"));
           
           rs.close();
           
           return produto;
           
       }
       
     
     }catch (SQLException ex){
         Logger.getLogger(principal.ProdutoDAO.class.getName()).log(Level.SEVERE, null, ex);
           
     }
        return null;
     }   
    
    
}

Se alguem poder ajudar agradecido…

26 Respostas

drsmachado

Camarada, não entendi.
Se não haverá associação do fornecedor com o produto, no banco, o sistema está com falha. Veja bem, como você vai definir que o fornecedor João é o que fornece os produtos A, B e C? Além, como você vai definir que os produtos A, B, D, C, E, G são do fornecedor João ou da Maria?
Se você pretende forçar o relacionamento 1 : 1, dizendo que cada fornecedor só fornece um produto e cada produto é fornecido apenas por um fornecedor, creio que, no mínimo, produto deva ter uma chave estrangeira que refira à chave primária do fornecedor.
Caso contrário, apenas gere um número randômico e apresente como código do fornecedor no produto.

alves.Felipe

NO consultar do produtoDao vc faz a mesma consulta que no FornecedorDao…
da um espaço entre a tabela e o where

String sql = "Select Nomeproduto,ValorProduto from Fornecedor "
+ “where CodProduto = ?”;

D

cara eu só precisa que no projeto, ele puxa-se o nome do fornecedor pelo codigo digitado na tela do produto…

D

eu não conheço quase nada de java e mysql, toh apanhando, mas tendo q apresentar esse projeto hoje… queria só fazer algo bem simples pra entregar, depois eu voh aperfeiçoar para apreder

M

Se você quer trazer valores de duas tabelas diferentes, você deve fazer um JOIN entre as duas tabelas…

Pode postar a classe que faz a conexão com o Banco de Dados?

Obrigado;

charleston10

Para união de registros de várias tabelas em um resultado só, voce deve utilizar os JOIN da vida…

Cross, Inner, Left, Right ou Full Outer Join
http://javaaberto.blogspot.com.br/2012/10/sql-cross-inner-left-right-e-full-outer.html

Passa pra gente, toda estrutura da tabela, e explica qual união de dados que vc quer fazer com o Fornecedor e Produtos
mostrando quais campos devem retornar e qual possivel resultado que deve aparecer…

;]

drsmachado

Sinceramente, isso é desculpa de gente medíocre.
Se não conhece, não se engane, não minta para si mesmo e não tente bancar o esperto.
Aceite que você não sabe, estude, vá atrás de informação.
O que você está tentando fazer não é difícil, basta que você pesquise um pouco mais a fundo.

Enfim, logo algum idiota metido a bom samaritano vai te dar o código pronto, fazendo com que você não tenha que se esforçar, não aprenda e continue medíocre. Enquanto ele, vai continuar se achando bom e altruísta, sem perceber que acabou te prejudicando.

D

mariogpr a classe que faz a conexão é a seguinte

package principal;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Douglas
 */
public class ConnectionFactory {
    
    public static Connection getConnection () throws SQLException {
        try {
            Class.forName ("com.mysql.jdbc.Driver");
            String banco = "jdbc:mysql://localhost/banco";
            String usuario = "usuario";
            String senha = "senhausuario";
            
            
            
            return DriverManager.getConnection(banco, usuario, senha);
            
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(ConnectionFactory.class.getName()).log(Level.SEVERE, null, ex);
        }                    
        
        return null;
    }
    
}
M

Tem certeza que o “driver” de conexão com o MySQL esta no projeto e adicionado?

Como você vai exibir o resultado?

D

drsmachado

entendo seu ponto de vista, mas não estou pedindo o codigo pronto, quero saber onde esta o erro, para consertar, tão pouco estou com “desculpas”, mas o forum não é para tirar duvidas?

eu disse em resposta anterior que eu não conheço quase nada de java estou aprendendo agora (ou tentando, rsrsrsr)…

Mas obrigado pela atenção

D

mariogpr

eu acho que sim, porque adicionar dados no banco deu certo, queria exibir o nome do fornecedor na tela de cadastro de produto, e salvar no banco apenas o nome do fornecedor, pois como eu disse não entendo de java e sql, o mais simples que der pra fazer melhor…

C
String sql = "Select NomeFornecedor from Fornecedor"    
                      + "where CodFornecedor = ?";

Em todas sql de consulta esta faltando espaço antes do where.

String sql = "Select NomeFornecedor from Fornecedor where CodFornecedor = ?";
D

charleston10

as tabelas estão mais ou menos assim

Fornecedor

CodFornecedor (é a chave primaria)
NomeFornecedor,
CNPJ,
TelFornecedor,
EndFornecedor,
CidadeFornecedor,
UfFornecedor

Produto

CodProduto, (chave primaria)
Marca,
NomeProduto,
UnidadeMedidaProduto,
NomeDivisao,
NOriginalProduto,
DecProduto,
Despesa,
NParaleloProduto,
GrupoDespProduto,
ValorProduto

M

Douglas_DGS:
mariogpr

eu acho que sim, porque adicionar dados no banco deu certo, queria exibir o nome do fornecedor na tela de cadastro de produto, e salvar no banco apenas o nome do fornecedor, pois como eu disse não entendo de java e sql, o mais simples que der pra fazer melhor…

Sinceramente, não entendi muito bem;

Se você quer que apareça o nome do fornecedor na tela de cadastro do produto;

Você fornece o ID do fornecedor, faz um select na tabela de fornecedor, trazendo somente o Nome e mostra na tela;

Para você trazer somente o nome, você faz, SELECT campoDesejado FROM tabela WHERE parametroFornecido = parametroDaTabela

D

mariogpr

isso que eu estou tentando fazer, vou retirar os espaços antes do where para ver se da certo…

Se eu conseguir eu consigo usar a informação para salvar junto na tabela do produto?

M

Douglas_DGS:
mariogpr

isso que eu estou tentando fazer, vou retirar os espaços antes do where para ver se da certo…

Se eu conseguir eu consigo usar a informação para salvar junto na tabela do produto?

Consegue, pq vc vai pegar os parametros que a pessoa digitar, então você passa o código digitado para buscar o fornecedor para inserir na tabela de produtos;

Edit:

Sugiro você criar o campo “CodFornecedor” na tabela de produtos e criar uma chave estrangeira para a tabela de Fornecedor;

D

Consegui realmente faltava um espaço antes do where, obrigado

D

e tem como receber mais de um resultado por em um campo de texto?

M

Se for várias linhas, melhor utilizar tabela;

Se for soh uma linha, acho que consegue por string;

D

bELEZA, OBRIGADO PELA AJUDA ACHO QUE VOU TER QUE TENTAR POR TABELA MESMO, QUERO RECEBER UM NOME DO PRODUTO E VALOR NA LINHA DEBAIXO NOVAMENTE UM NOME DE PRODUTO E VALOR, E ASSIM POR DIANTE

M

Se for trabalhar com tabela, sugiro utilizar implementando o AbstractTableModel;

Aqui você pode encontrar exemplos: http://www.guj.com.br/java/199067-redimensionar-jtable---pra-variar--resolvido-/2#1001295

charleston10


Douglas
preciso saber como informar um codigo de um fornecedor, e associar ao produto, não precisa estar gravndo no banco mais na tela do produto teria que puxar, e na tela de pedido, colocar o codigo do produto e ele puxar o nome e o valor.

Voltando a fita, é que nao estou conseguindo entender oq vc quer fazer;

Vamos por parte, preciso saber como informar um codigo de um fornecedor, e associar ao produto, ,
Aqui vc tem uma tela de cadastro de produtos, e ali pode ter uma caixa de seleção q vc pode escolher qual fornecedor e do produto que esta sendo cadastrado.
Seria isso?

e na tela de pedido, colocar o codigo do produto e ele puxar o nome e o valor.
Seria, colocar o codigo do produto e automaticamente ele puxar o valor desse produto e tambem o nome do fornecedor do mesmo?

Se for isso mesmo que for fazer, é coisa simples é apenas SQL…

D

Charles

Seguinte, na parte de cadastrar o produto ok, tinha um espaço antes do where, que era o erro, eu queira puxar o fornecedor pelo codigo e gravar o nome dele na tabela do produto…

Agora na tela do pedido eu queria puxar, o nome e valor do produto, na area de texto e salvar no banco, porém tinha que puxar vários produtos, tipo coloca o cod da um enter e coloca o codigo do novo produto, ali eu teria uma listagem de produtos para salvar na tabela de pedidos…

pensei que seriam os mesmos comandos, mas para incluir no pedido, não deu certo

ViniGodoy

Por favor, não peça urgência no fórum.

Além disso, dê um título descritivo. De nada adianta dizer que seu tópico é de “java” num fórum de Java. O mysql ajuda um pouco, mas não descreve qual é a dúvida.

Finalmente, abra os tópicos no local certo. Existe um fórum só para dúvidas de persistência e JDBC. Nem tudo é Java Básico.

charleston10

Douglas
Seguinte, na parte de cadastrar o produto ok, tinha um espaço antes do where, que era o erro, eu queira puxar o fornecedor pelo codigo e gravar o nome dele na tabela do produto…

Agora na tela do pedido eu queria puxar, o nome e valor do produto, na area de texto e salvar no banco, porém tinha que puxar vários produtos, tipo coloca o cod da um enter e coloca o codigo do novo produto, ali eu teria uma listagem de produtos para salvar na tabela de pedidos…

pensei que seriam os mesmos comandos, mas para incluir no pedido, não deu certo

Agora entendi, isso é coisa simples.
O que vc precisa fazer, na sua tabela de cadastro de produtos você precisa criar um campo que seja uma chave estrangeira que vai servir para relacionar com
a tabela de fornecedores (fkcodigo[id_fornecedor] -> se relaciona com o campo id da tabela fornecedores).
Quando você puxar o fornecedor pelo codigo “vc nao deve guardar o nome dele”, mas sim o codigo… (padrão de sistema para nao haver redundancia)
O nome vc faz aparecer no campo de texto, só isso.

Agora em pedidos, voce deve criar uma tabela que tenha relacionamento 1xN, isso quer dizer que essa tabela relaciona um tipo de produto mas que tenham varios registros diferentes.

Ficaria mais ou menos assim,

Tabela Produtos_Pedidos
id_cod_produto pk
id_pedido fk
valor
qtde
total

Tabela Pedidos
id_pedido pk
id_cliente fk
subtotal
troco
data
hora

Aqui vc esta relacionando todos produtos do pedido a um só pedido.
Posso ter 50 produtos em um só pedido.

Pra vc entender isso aconselho vc estudar modelagem de banco de dados.
Agora pra manipulação, caso vc queira mostrar todo esse relacionamento em um relatorio ai é SQL puro…

Assim vc terá uma outra visão de criação de sistemas da maneira correta.

Segue ai meu bloquezinho java
http://javaaberto.blogspot.com.br/2012/09/normalizacao-de-banco-de-dados.html
http://javaaberto.blogspot.com.br/2012/06/guia-rapido-comandos-sql.html

D

Pessoal consegui, terminar, muito obrigado pela ajuda de vcs e desculpa pelas falhas…

Criado 7 de novembro de 2012
Ultima resposta 8 de nov. de 2012
Respostas 26
Participantes 7