Ola, sou novo aqui no tópico, estou com uma duvida.
Tenho uma tabela compra onde tem fkcliente e fkproduto ,gostaria de saber como eu posso pegar as id dessas fk ,para min poder inserir em compras.
Muito obrigado.
Ola, sou novo aqui no tópico, estou com uma duvida.
Tenho uma tabela compra onde tem fkcliente e fkproduto ,gostaria de saber como eu posso pegar as id dessas fk ,para min poder inserir em compras.
Muito obrigado.
Uma hora você vai ter que escolher qual produto e qual cliente vai comprar. É nesta hora
Eu tenho um combo cliente e produto . mas não sei como realmente pegar os valores dessa combo para min poder inserir as fk.
Muito obrigado
JCombo combo = new JCombo()
String valorCombo = combo.getSelectedItem().toString();
Bom, eu já peguei o valor , mas só que esta vindo como string, e não esta puxando o código
Aqui meu codigo.
Combobox
public void carregaComboBox2()
{
try
{
jComboBoxServicos.addItem("");
Connection conn;
conn = conexaoBD.getConexao();
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery("SELECT servico.nomeservico FROM servico ORDER BY nomeservico" );
while(rs.next())
{
jComboBoxServicos.addItem(rs.getString("nomeservico"));
}
rs.close();
conn.close();
}
catch(Exception e)
{
JOptionPane.showMessageDialog(null,
"Ocorreu erro ao carregar a Combo Box", "Erro",
JOptionPane.ERROR_MESSAGE);
}
}
public void carregaComboBox3()
{
try
{
jComboBoxCliente.addItem("");
Connection conn;
conn = conexaoBD.getConexao();
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery("SELECT cliente.nome FROM cliente where cliente.codcliente=?" );
while(rs.next())
{
jComboBoxCliente.addItem(rs.getString("nome"));
}
rs.close();
conn.close();
}
catch(Exception e)
{
JOptionPane.showMessageDialog(null,
"Ocorreu erro ao carregar a Combo Box", "Erro",
JOptionPane.ERROR_MESSAGE);
}
}
E que meu combo mostra os nome, queria saber se teria como eu pegar o id também, pq se eu executar dessa forma esta dando erro, pq estou passando um valor string e não int.
Obrigado.
Uma forma para resolver seu problema é criar um model personalizado para os combobox, nesse caso vc pode retornar o objeto q vc precisa e pegar o valor q vc quer, além disso vc terá um model flexível para esse objeto para utilizar sempre q precisar de qualquer dado desse objeto, segue um exemplo com o objeto Estado, vc pode adaptá-lo p/ sua necessidade:
Geralmente coloco esse método em uma classe separada, algo como Util ou EstadoService, dependendo do padrão
// Método para criar um model para o comboBox
public DefaultComboBoxModel getCbModelEstado() {
DefaultComboBoxModel model = new DefaultComboBoxModel();
List<Estado> listaEstado;
// Pesquisa a lista de estados
listaEstado = this.getListaEstado();
// Insere a palavra "Todos" no início do combo para pesquisar todos os estados
model.addElement("Todos");
// Preenche a lista de elementos
if (listaEstado != null) {
for (Estado e : listaEstado) {
model.addElement(e);
}
}
return model;
}
// Insere o model no comboBox
cbEstado.setModel(new EstadoService().getCbModelEstado());
// Recebe o id do estado
int idEstado = cbEstado.getSelectedItem().getIdEstado();
// Esse código acima eu não me lembro muito bem se precisa do cast, mas se precisar vc pode fazer assim
int idEstado = ((Estado) cbEstado.getSelectedItem()).getIdEstado();
Uma observação, tenho quase certeza q vc terá q sobrepor o método toString() para retornar o texto q vc quer q seja mostrado no comboBox, se não me engano o model mostra o texto retornado pelo método toString() da classe.
Fabio esta list sua puxa do banco?pq se não acho q não serve para min.
Não compreendi muito essa parte do método.
Pq eu acho que (Estado) e uma classe onde você vai declarando os estados.
Como ficaria com uma busca no banco, se vc puder dar um exemplo,eu iria entender melhor.
Aqui esta meu controle quando eu vou adicionar
ControleCompra controle = new ControleCompra;
String valor = this.jTvalor.getText();
String quantidade = this.jFquantidade.getText();
int valorCombo = (int) jComboBoxCliente.getSelectedItem();
int valorComdbo2 = (int) jComboBoxFuncionario.getSelectedItem();
try {
controle.adicionar(valor quantidade, valorCombo, valorCombo2);
} catch (SQLException ex) {
Logger.getLogger(janelaVendas.class.getName()).log(Level.SEVERE, null, ex);
}
ERRO java.lang.String cannot be cast to java.lang.Integer//tendo adicionar mas ele pega e o nome do cliente e não a id.
Obrigado por me ajudar.
[quote=matheus145]Fabio esta list sua puxa do banco?pq se não acho q não serve para min.
Não compreendi muito essa parte do método.
Pq eu acho que (Estado) e uma classe onde você vai declarando os estados.
Como ficaria com uma busca no banco, se vc puder dar um exemplo,eu iria entender melhor.
Aqui esta meu controle quando eu vou adicionar
ControleCompra controle = new ControleCompra;
String valor = this.jTvalor.getText();
String quantidade = this.jFquantidade.getText();
int valorCombo = (int) jComboBoxCliente.getSelectedItem();
int valorComdbo2 = (int) jComboBoxFuncionario.getSelectedItem();
try {
controle.adicionar(valor quantidade, valorCombo, valorCombo2);
} catch (SQLException ex) {
Logger.getLogger(janelaVendas.class.getName()).log(Level.SEVERE, null, ex);
}
ERRO java.lang.String cannot be cast to java.lang.Integer//tendo adicionar mas ele pega e o nome do cliente e não a id.
Obrigado por me ajudar.[/quote]
A consulta no banco é independente, eu pensei q vc já tivesse feito essa consulta, por isso não disse nada.
De qualquer forma vc pode consultar a lista no banco e preencher uma lista de objetos, no exemplo “ArrayList”, e usa essa lista para preencher os dados da combo no laço for.
Vamos usar um exemplo de Cliente. Vc tem um método q faz a busca de todos os clientes no banco correto? Na criação do model vc pode chamar esse método e trazer a lista de clientes, depois faz um laço com essa lista preenchendo a combobox com os objetos Cliente da lista, entendeu?
Mais uma coisa, geralmente eu coloco esse método em uma classe separada da view, insiro o setModel logo após a criação do componente.
Acho q o último post ficou meio confuso pq coloquei tudo junto, vou editar o post e separar o código, se ainda estiver com dúvidas posta aí.
Olha Fabio Acho que consegui fazer ma na hora de mostrar os cliente não funciona.
Aqui esta o método que coloco embaixo de initcomponets;
public DefaultComboBoxModel getCbModelCliente() throws SQLException {
DefaultComboBoxModel model = new DefaultComboBoxModel();
List<Cliente> listaCliente;
// Pesquisa a lista de clientes
ClienteDAO dao = new ClienteDAO();
listaCliente= dao.getLista(jComboBoxCliente.getSelectedItem());//já tentei toString ele tmb não vai.
// Insere a palavra "Todos" no início do combo para pesquisar todos os clientes
model.addElement("Todos");
// Preenche a lista de elementos
if (listaCliente != null) {
for (Cliente e : listaCliente) {
model.addElement(e);
}
}
return model;
}
Aqui esta meu getlista eu tinha, só que não tinha entendido antes,o que era.
public List<Cliente> getLista(String nome) throws SQLException {
String sql = "select * from cliente INNER JOIN Endereco ON cliente.codcliente = Endereco.fkcliente WHERE cliente.nome like ? ";
List<Cliente> minhaLista;
try (PreparedStatement stmt = this.conexao.prepareStatement(sql)) {
stmt.setString(1, nome);
try (ResultSet rs = stmt.executeQuery()) {
minhaLista = new ArrayList<Cliente>();
while (rs.next()) {
Cliente c1 = new Cliente();
c1.setCodcliente(Integer.valueOf(rs.getString("codcliente")));
c1.setNome(rs.getString("nome"));
c1.setTelefone(rs.getString("telefone"));
c1.setCpf(rs.getString("cpf"));
c1.setEmail(rs.getString("email"));
c1.setDatanascimento(rs.getDate("datanascimento"));
c1.setObservacao(rs.getString("observacao"));
Endereco e = new Endereco();
e.setIdEndereco(Integer.valueOf(rs.getString("fkcliente")));
e.setEndereco(rs.getString("endereco"));
e.setCidade(rs.getString("cidade"));
e.setUf(rs.getString("uf"));
c1.setEndereco(e);
minhaLista.add(c1);
}
rs.close();
stmt.close();
return minhaLista;
}
}
}
Eu acho que não eu sabendo em como implementar.
Obrigado Fabio.Acho que já estou no caminho.
Parece q vc está sim no caminho, porém existem algumas observações.
// no método getCbModelCliente()
// nessa busca vc não deve passar o item selecionado pois vc não tem nenhum ainda
ClienteDAO dao = new ClienteDAO();
// listaCliente= dao.getLista(jComboBoxCliente.getSelectedItem()); - remova essa linha
listaCliente= dao.getLista(); // e add esta
Depois disso só falta colocar o model no combobox, q é aquele código q passei mais acima:
jComboBoxCliente.setModel(getCbModelCliente());
Fabio
Duvidas
Esta certo eu coloca esse metodo depois de initcomponets?pq eu tirei aquele outro método que criei para buscar o nome de cliente
listaCliente= dao.getLista(null); //ele pedi um valor e aqui fica nullo
Onde eu fixo meu model.
Esta parte aqui eu coloco quando eu vou salvar no meu botão?
jComboBoxCliente.setModel(getCbModelCliente());
Obrigado
O preenchimento da lista de clientes pode ficar dentro do getModel, pois assim vc só pesquisa qdo for preencher o combobox.
Outra coisa, vc disse q colocou o método para pesquisar o cliente por nome, mas se vc vai preencher a lista com TODOS os clientes sem excessão, vc deve consultar sem parâmetro, eu geralmente crio outro método sem parâmetro para buscar todos os itens da tabela, mas fica a seu critério.
Sobre o setModel, eu coloco dentro do initComponents() logo após instanciar os objetos, antes de adicioná-lo ao JFrame, veja:
private void initComponents() {
//... códigos diversos
// Instancia os objetos
cbEstado = new JComboBox();
cbEstado.setModel(new EstadoService().getCbModelEstado());
// ... restante das intâncias e códigos diversos
}
Uma dica, se vc estiver usando o NetBeans, nas propriedades do componente JComboBox tem uma função para atribuir o Model, não me lembro bem como se faz (estou sem NetBeans aki no trampo) mas entrando nessa função vc tem as opções para add seu próprio método para inserir o model.
Um passo a passo rápido:
1 - Crie o método de busca para preencher o comboBox. Ex: getListaEstado(). Geralmente coloco em uma classe separada da “view”, mas fica a seu critério.
2 - Crie um método para preencher e retornar um “DefaultComboBoxModel”, no meu exemplo getCbModelEstado().
3 - Na inicialização dos componentes, após instanciar, sete o DefaultModel do comboBox: “jComboBoxEstado.setModel(getCbModelEstado());”.
4 - Sobrescreva o método toString() do objeto. Não tenho certeza mas acho q os valores preenchidos na comboBox são do método toString().
5 - Qdo precisar pegar qualquer valor do objeto use o método “getSelectedItem()” do comboBox e vc terá o objeto completo selecionado, com todos do dados inseridos.
Espero q assim fique mais fácil de entender.
Bom eu fiz o que você disse para criar outro getlist.tudo bem
Aqui esta o novo getlist
public List<Cliente> getLista2() throws SQLException {
String sql = "select * from cliente WHERE cliente.nome like ? ";
List<Cliente> minhaLista;
try (PreparedStatement stmt = this.conexao.prepareStatement(sql)) {
try (ResultSet rs = stmt.executeQuery()) {
minhaLista = new ArrayList<>();
while (rs.next()) {
Cliente c1 = new Cliente();
c1.setCodcliente(Integer.valueOf(rs.getString("codcliente")));
c1.setNome(rs.getString("nome"));
c1.setTelefone(rs.getString("telefone"));
c1.setCpf(rs.getString("cpf"));
c1.setEmail(rs.getString("email"));
c1.setDatanascimento(rs.getDate("datanascimento"));
c1.setObservacao(rs.getString("observacao"));
}
rs.close();
stmt.close();
return minhaLista;
}
}
}
Aqui esta model.
public DefaultComboBoxModel getCbModelCliente() throws SQLException {
DefaultComboBoxModel model = new DefaultComboBoxModel();
List<Cliente> listaCliente;
// Pesquisa a lista de estados
ClienteDAO dao = new ClienteDAO();
listaCliente= dao.getLista2();
// Insere a palavra "Todos" no início do combo para pesquisar todos os estados
model.addElement("Todos");
jComboBoxCliente.setModel(getCbModelCliente());
// Preenche a lista de elementos
if (listaCliente != null) {
for (Cliente e : listaCliente) {
model.addElement(e);
}
}
return model;
}
Aqui me retorna que da o seguinte erro
ava.sql.SQLException: No value specified for parameter 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:982)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927)
at com.mysql.jdbc.PreparedStatement.checkAllParametersSet(PreparedStatement.java:2578)
at com.mysql.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:2554)
at com.mysql.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:2480)
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2234)
at persistencia.ClienteDAO.getLista2(ClienteDAO.java:120)
Nesta linha.
try (ResultSet rs = stmt.executeQuery()){
Minha inicialização
public janelaVendas() {
initComponents();
try {
getCbModelCliente();
} catch (SQLException ex) {
Logger.getLogger(janelaVendas.class.getName()).log(Level.SEVERE, null, ex);
}
Obrigado mesmo Fabio por estar me ajudando,mas esta complicado d+ só para pegar uma fk de outra tabela para min poder inserir compras.
Acho que se resolvendo esse erro irar mostra os clientes.
Primeiro, remova a linha abaixo do método “getCbModelCliente()”:
// Essa linha tem q estar no initComponents, depois de instanciar o jComboBox
jComboBoxCliente.setModel(getCbModelCliente());
E segundo, vc está fazendo a consulta sem parâmetros, pq vc deixou a cláusula WHERE para pesquisar por nome do cliente?
// Se vc não vai passar parâmetro nenhum na consulta, remova o WHERE
String sql = "select * from cliente WHERE cliente.nome like ? ";
Ola fabio,agora deu quase tudo certo,menos a pesquisa com os cliente que não mostra.
Aqui e a inicializacaão
initComponents();
carregaComboBox() ;
carregaComboBox2() ;
// carregaComboBox3() ;//Este aqui era o antigo q listava
carregaComboBox4() ;
jComboBoxCliente = new JComboBox();
try {
jComboBoxCliente.setModel(getCbModelCliente());
} catch (SQLException ex) {
Logger.getLogger(janelaVendas.class.getName()).log(Level.SEVERE, null, ex);
}
Nova lista
public List<Cliente> getLista2() throws SQLException {
String sql = "SELECT * FROM cliente ORDER BY nome";
List<Cliente> minhaLista;
try (PreparedStatement stmt = this.conexao.prepareStatement(sql)) {
try (ResultSet rs = stmt.executeQuery()) {
minhaLista = new ArrayList<>();
while (rs.next()) {
Cliente c1 = new Cliente();
c1.setCodcliente(Integer.valueOf(rs.getString("codcliente")));
c1.setNome(rs.getString("nome"));
c1.setTelefone(rs.getString("telefone"));
c1.setCpf(rs.getString("cpf"));
c1.setEmail(rs.getString("email"));
c1.setDatanascimento(rs.getDate("datanascimento"));
c1.setObservacao(rs.getString("observacao"));
}
rs.close();
stmt.close();
return minhaLista;
}
}
}
Aqui o model
public DefaultComboBoxModel getCbModelCliente() throws SQLException {
DefaultComboBoxModel model = new DefaultComboBoxModel();
List<Cliente> listaCliente;
// Pesquisa a lista de estados
ClienteDAO dao = new ClienteDAO();
listaCliente= dao.getLista2();
// Insere a palavra "Todos" no início do combo para pesquisar todos os estados
model.addElement("Todos");
// Preenche a lista de elementos
if (listaCliente != null) {
for (Cliente e : listaCliente) {
model.addElement(e);
}
}
return model;
}
Agora só falta mostra a pesquisa engraçado ,que não executa nenhum erro.
Obrigado.
Cara, mais atenção ao seu código, vc faz a pesquisa no banco mas não inclui nenhum cliente à sua lista, modifique o laço WHILE da pesquisa acrescentando a linha abaixo no final:
// Aqui vc inicia a lista
minhaLista = new ArrayList<>();
// Faz o laço para o retorno SQL
while (rs.next()) {
// Instancia o cliente a cada resultado - até aki está tudo certo
Cliente c1 = new Cliente();
// ... restante do seu código
// antes de finalizar o laço vc tem q incluir o cliente à sua lista
minhaLista.add(c1);
} // fim do laço
Desculpa mesmo, e que eu tinha criado outro list e apaguei sem querer.
Aqui esta agora
String sql = "SELECT * FROM cliente ORDER BY nome";
List<Cliente> minhaLista;
try (PreparedStatement stmt = this.conexao.prepareStatement(sql)) {
try (ResultSet rs = stmt.executeQuery()) {
minhaLista = new ArrayList<>();
while (rs.next()) {
Cliente c1 = new Cliente();
c1.setCodcliente(Integer.valueOf(rs.getString("codcliente")));
c1.setNome(rs.getString("nome"));
c1.setTelefone(rs.getString("telefone"));
c1.setCpf(rs.getString("cpf"));
c1.setEmail(rs.getString("email"));
c1.setDatanascimento(rs.getDate("datanascimento"));
c1.setObservacao(rs.getString("observacao"));
minhaLista.add(c1);
}
Mas continua a não mostrar os valores do bd.
Obrigado Fabio.
Verifica no método do model se a lista está sendo preenchida corretamente. Posta o método “toString()” do cliente tbm, por favor.
Esse aqui e o print q tirei da lista para ver se estava vindo algum valor.
System.out.print(listaCliente);
[modelo.Cliente@648b18f2]CONSTRUÍDO COM SUCESSO (tempo total: 10 segundos) // apareceu isso
model
public DefaultComboBoxModel getCbModelCliente() throws SQLException {
DefaultComboBoxModel model = new DefaultComboBoxModel();
List<Cliente> listaCliente;
// Pesquisa a lista de estados
ClienteDAO dao = new ClienteDAO();
listaCliente= dao.getLista2();
// Insere a palavra "Todos" no início do combo para pesquisar todos os estados
model.addElement("Todos");
System.out.print(listaCliente);
// Preenche a lista de elementos
if (listaCliente != null) {
for (Cliente e : listaCliente) {
model.addElement(e);
}
}
return model;
}
Decupe -me mas não tenho o método “toString” no cliente.Seria da class do dao?eu não uso esse método neles.
Obrigado.
Insere o método toString na classe cliente, provavelmente seja isso q está dando erro. Dá uma pesquisada rápida em como sobrepor o método, é bem simples.
Se não me engando é só isso:
public String toString() {
return cliente.getNome(); // exemplo, retorne o q quiser mostrar
}