estou com alguns problemas aqui, não consigo retornar um array. segue o codigo:
publicCliente[]buscar(StringbuscaNome)throwsException{Cliente[]clientes;ResultSetrs;PreparedStatementstmt=this.connection.prepareStatement("Select * from Cliente where nome=?");stmt.setString(1,buscaNome);rs=stmt.executeQuery();intcont=0;while(rs.next()){Clienteaux=newCliente();aux.setNome(rs.getString(1));aux.setRG(rs.getString(2));aux.setDataNascimento(rs.getString(3));aux.setSexo(rs.getString(4));clientes[cont]=aux;cont++;}stmt.close();returnclientes;}
Como podem ver estou executando uma query e gostaria de retornar pelo metodo o reultado dessa query, desculpem a ignorancia, mas não consigo enchergar o problema.
Robson sua consulta esta correta? você está procurando cliente com nome igual a ?
select *
from Cliente
where nome = ? -->> voce esta prcurando isso msm? se quiser todos os clientes coloca só
select *
from Cliente que ja vai dar certo, talvez o problema seja esse…
neoCortex
robsonperassoli:
Olá galera do guj.
estou com alguns problemas aqui, não consigo retornar um array. segue o codigo:
Como podem ver estou executando uma query e gostaria de retornar pelo metodo o reultado dessa query, desculpem a ignorancia, mas não consigo enchergar o problema.
Como posso resolver isso?
desde já obrigado
Pelo que entendi queres retornar um array de objetos!!
Já tentou trabalhar com ArrayList?
publicArrayListbuscar(StringbuscaNome){ArrayList<Cliente>lista=newArrayList<Cliente>();//Crio o objeto ArrayList do tipo ClienteClienteaux=null;ResultSetrs;try{//prefira o try ao throwsPreparedStatementstmt=this.connection.prepareStatement("Select * from Cliente where nome LIKE %?%");//Alterei um pouco o código aqui e procure sempre descrever os campos que vc querstmt.setString(1,buscaNome);rs=stmt.executeQuery();while(rs.next()){aux=newCliente();aux.setNome(rs.getString("nome"));//nomes dos campos das tabelas escritosaux.setRG(rs.getString("rg"));aux.setDataNascimento(rs.getString("dataNascimento"));aux.setSexo(rs.getString("sexo"));lista.add(aux);//Adiciono o objeto após o mesmo estar devidamente carregado não necessitando de contador}}catch(SQLExceptione){e.printStackTrace();}stmt.close();returnlista;}
O problema é que você não está instanciado o seu array. Falta algo do tipo:
clientes=newCliente[NUM_CLIENTES];
Pelo o que estou vendo aqui na api, não tem um método que te retorne o número de linhas do resultado (talvez eu simplesmente não tenha achado). De qualquer maneira, eu também aconselho a usar a interface List ou Collection, como o colega citou.
robsonperassoli
Ahh, começei a entender, na verdade o que mais se encaixa na minha situação é o exemplo do neoCortex com o arraylist, já que é uma consulta que pode retornar resultados em quantidades variadas, muito obrigado mesmo pela ajuda.
L.Bach
Robson, falta inicializar o array. Entretanto, por n motivos que tu podes encontrar facilmente nas buscas aqui no GUJ, é muito recomendável que utilizes ArrayList para guardar objetos.
Abraços
robsonperassoli
Olá, ainda estou com alguns problemas, realizo minha consulta tranquilo, porém não retorna nada nem dá nenhum tipo de erro. O que pode ser?
segue minha classe:
publicArrayListbuscar(StringbuscaNome){ArrayList<Cliente>lista=newArrayList<Cliente>();Clienteaux=null;ResultSetrs;try{PreparedStatementstmt=this.connection.prepareStatement("SELECT * FROM Cliente WHERE nome LIKE ?;");stmt.setString(1,"'%"+buscaNome+"%'");rs=stmt.executeQuery();while(rs.next()){aux=newCliente();aux.setNome(rs.getString(0));//nomes dos campos das tabelas escritos aux.setRG(rs.getString(1));aux.setDataNascimento(rs.getString(2));aux.setSexo(rs.getString(3));lista.add(aux);}stmt.close();}catch(SQLExceptione){e.printStackTrace();}returnlista;}
Na classe onde estou fazendo a consulta uso o seguinte codigo:
lmClientes é o ListModel, usado para adicionar os componentes na JList;
não conhecia o enhanced-for, sou novato mesmoo…
obrigado pela dica, porém como posso resolver o meu problema com a consulta?
M
marcobiscaro2112
É um DefaultListModel? Eu nunca usei um, mas segundo a documentação:
O primeiro argumento é o índice no qual se insere o valor. Mas é sempre zero?
Será esse o problema? Talvez esteja falando besteira… mas verifique isso.
robsonperassoli
marcobiscaro2112:
É um DefaultListModel? Eu nunca usei um, mas segundo a documentação:
O primeiro argumento é o índice no qual se insere o valor. Mas é sempre zero?
Será esse o problema? Talvez esteja falando besteira… mas verifique isso.
Sim, é um DefaultListmodel.
na verdade o 0 é para adicionar na primeira posição da lista, já tentei mudai isso tbm.
Creio que o erro seja na consulta, pois quando tento inserir no banco de dados acontece a mesma coisa, nada adicionado e nenhum erro nem no banco nem na compilação do programa.
segue o código para inserção de dados, caso queira dar uma olhada.
publicvoidadiciona(Clientecliente){try{PreparedStatementstmt=this.connection.prepareStatement("INSERT INTO cliente VALUES (?,?,?,?)");stmt.setString(1,cliente.getNome());stmt.setString(2,cliente.getRG());stmt.setString(3,cliente.getDataNascimento());stmt.setString(4,cliente.getSexo());javax.swing.JOptionPane.showMessageDialog(null,stmt);stmt.execute();stmt.close();}catch(Exceptione){e.getStackTrace();}}
estou usando o postgresql como banco. Não sei usá-lo muito bem também.
M
marcobiscaro2112
O JOptionPane.showMessegeDialog funciona (aparece a janela), ou nem isso?
importjava.sql.*;importjava.util.ArrayList;publicclassClienteDAO{privateConnectionconnection;publicClienteDAO(){try{this.connection=ConnectionFactory.getConnection();}catch(Exceptione){e.printStackTrace();}}publicvoidadiciona(Clientecliente){try{PreparedStatementstmt=this.connection.prepareStatement("INSERT INTO cliente VALUES (?,?,?,?)");stmt.setString(1,cliente.getNome());stmt.setString(2,cliente.getRG());stmt.setString(3,cliente.getDataNascimento());stmt.setString(4,cliente.getSexo());javax.swing.JOptionPane.showMessageDialog(null,stmt);stmt.execute();stmt.close();}catch(Exceptione){e.getStackTrace();}}publicvoiddeleta(Clientecliente)throwsException{PreparedStatementstmt=this.connection.prepareStatement("delete from Cliente where nome=?");stmt.setString(1,cliente.getNome());stmt.execute();stmt.close();}publicArrayListbuscar(StringbuscaNome){ArrayList<Cliente>lista=newArrayList<Cliente>();Clienteaux=null;ResultSetrs;try{PreparedStatementstmt=this.connection.prepareStatement("SELECT * FROM Cliente WHERE nome LIKE ?;");stmt.setString(1,"'%"+buscaNome+"%'");rs=stmt.executeQuery();while(rs.next()){aux=newCliente();aux.setNome(rs.getString(0));//nomes dos campos das tabelas escritos aux.setRG(rs.getString(1));aux.setDataNascimento(rs.getString(2));aux.setSexo(rs.getString(3));lista.add(aux);}stmt.close();}catch(SQLExceptione){e.printStackTrace();}returnlista;}}
importjava.awt.GridLayout;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjavax.swing.JButton;importjavax.swing.JComboBox;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JMenu;importjavax.swing.JMenuBar;importjavax.swing.JMenuItem;importjavax.swing.JTextField;publicclassFmInserirCadastroimplementsActionListener{privateJFramejanela=newJFrame("Inserir Cadastro");privateJMenuBarmenuBar=newJMenuBar();privateJMenuPrincipal=newJMenu("Principal");privateJMenuItemsair=newJMenuItem("Sair");privateJTextFieldtfNome=newJTextField();privateJTextFieldtfRg=newJTextField();privateJTextFieldtfNascimento=newJTextField();privateJComboBoxcbSexo=newJComboBox();privateJButtonbtSalvar=newJButton("Salvar");privateJLabellbNome=newJLabel("Nome: ");privateJLabellbRg=newJLabel("RG: ");privateJLabellbSexo=newJLabel("Sexo: ");privateJLabellbNascimento=newJLabel("Data de Nascimento: ");privateClientenovoCliente=newCliente();//construtorpublicFmInserirCadastro(){janela.setVisible(true);janela.setDefaultCloseOperation(janela.DISPOSE_ON_CLOSE);janela.setResizable(false);this.Principal.add(this.sair);this.menuBar.add(this.Principal);janela.setJMenuBar(this.menuBar);janela.setLayout(newGridLayout(5,2));janela.add(this.lbNome);janela.add(this.tfNome);janela.add(this.lbRg);janela.add(this.tfRg);janela.add(this.lbSexo);janela.add(this.cbSexo);this.cbSexo.addItem("Masculino");this.cbSexo.addItem("Feminino");janela.add(this.lbNascimento);janela.add(this.tfNascimento);janela.add(this.btSalvar);this.btSalvar.addActionListener(this);this.sair.addActionListener(this);janela.pack();}publicstaticvoidmain(String[]args){newFmInserirCadastro();}@OverridepublicvoidactionPerformed(ActionEventevt){if(evt.getSource()==this.btSalvar){//////verificarif(!this.tfNome.getText().equals("")&&!this.tfNascimento.getText().equals("")&&!this.tfRg.getText().equals("")){this.novoCliente.setNome(this.tfNome.getText());this.novoCliente.setRG(this.tfRg.getText());this.novoCliente.setDataNascimento(this.tfNascimento.getText());Stringsexo=(String)this.cbSexo.getSelectedItem();this.novoCliente.setSexo(sexo);try{ClienteDAOdao=newClienteDAO();dao.adiciona(novoCliente);}catch(Exceptione){javax.swing.JOptionPane.showMessageDialog(null,"Erro ao inserir no banco de dados");}}else{javax.swing.JOptionPane.showMessageDialog(null,"Todos os campos devem ser preenchidos!");}}elseif(evt.getSource()==this.sair){this.janela.dispose();}}}
Em ClientesDAO, na linha 45, mude a assinatura do método para:
publicArrayList<Cliente>buscar(StringbuscaNome){
Na linha 54 não entendi o porque dos “%”…
robsonperassoli
Os “%” são usados na consulta sql para pegar qualquer string que contenha o que está entre os “%”
M
marcobiscaro2112
Ahh… essa eu não sabia.
Calma que eu estou analisando (passei tudo para o Eclipse e fiz uma adaptação para MySQL). Estou fazendo testes…
robsonperassoli
Meu caro, como você pode ver as janelas estão um tanto quanto feias. Como poderia fazer para melhorar o layout? :oops: :oops:
M
marcobiscaro2112
Boas notícias!!!
Veja algumas alterações:
ClientesDAO.java
importjava.sql.Connection;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.util.ArrayList;publicclassClienteDAO{privateConnectionconnection;publicClienteDAO(){try{this.connection=ConnectionFactory.getConnection();}catch(Exceptione){e.printStackTrace();}}publicvoidadiciona(Clientecliente){try{PreparedStatementstmt=this.connection.prepareStatement("INSERT INTO cliente VALUES (?,?,?,?)");stmt.setString(1,cliente.getNome());stmt.setString(2,cliente.getRG());stmt.setString(3,cliente.getDataNascimento());stmt.setString(4,cliente.getSexo());javax.swing.JOptionPane.showMessageDialog(null,stmt);stmt.execute();stmt.close();}catch(Exceptione){e.getStackTrace();}}publicvoiddeleta(Clientecliente)throwsException{PreparedStatementstmt=this.connection.prepareStatement("delete from Cliente where nome=?");stmt.setString(1,cliente.getNome());stmt.execute();stmt.close();}// modificado!!// use o tipo específicopublicArrayList<Cliente>buscar(StringbuscaNome){ArrayList<Cliente>lista=newArrayList<Cliente>();Clienteaux=null;ResultSetrs;try{PreparedStatementstmt=this.connection.prepareStatement("SELECT * FROM Cliente WHERE nome LIKE ?;");stmt.setString(1,"%"+buscaNome+"%");System.out.println(stmt.toString());rs=stmt.executeQuery();while(rs.next()){aux=newCliente();// modificado!// o índice começa do 1 (pelo menos no MySQL)aux.setNome(rs.getString(1));aux.setRG(rs.getString(2));aux.setDataNascimento(rs.getString(3));aux.setSexo(rs.getString(4));lista.add(aux);}stmt.close();}catch(SQLExceptione){e.printStackTrace();}returnlista;}}
FmExcluirCadastro.java
importjava.awt.GridLayout;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.util.ArrayList;importjavax.swing.DefaultListModel;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JList;importjavax.swing.JPanel;importjavax.swing.JTextField;publicclassFmExcluirCadastroimplementsActionListener{privateJFramejanela=newJFrame("Excluir Cadastro");privateJPanelpnBusca=newJPanel();privateJPanelpnResult=newJPanel();privateJLabellbBuscar=newJLabel("Buscar: ");privateJTextFieldtfBusca=newJTextField(5);// modificado!// ao invés de colocar espaços vazios, use isso para definir o tamanhoprivateJButtonbtBuscar=newJButton("Ir");privateJButtonbtExcluir=newJButton("Excluir");privateJListltClientes=newJList();privateDefaultListModellmClientes=newDefaultListModel();publicFmExcluirCadastro(){this.janela.setVisible(true);this.janela.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);this.janela.setResizable(false);this.janela.setLayout(newGridLayout(1,2));// this.tfBusca.setText("");// modificado!// vide anotação acimathis.btBuscar.addActionListener(this);this.pnBusca.add(this.lbBuscar);this.pnBusca.add(this.tfBusca);this.pnBusca.add(this.btBuscar);this.pnResult.setLayout(newGridLayout(2,2));this.pnResult.add(this.ltClientes);this.pnResult.add(this.btExcluir);this.janela.add(this.pnBusca);this.janela.add(this.pnResult);this.lmClientes.add(0,"Clientes:");this.ltClientes.setModel(this.lmClientes);this.janela.setSize(200,200);// this.janela.pack();// modificado!// mudei o tamanho para aparecer a JList inteira}publicstaticvoidmain(String[]args){newFmExcluirCadastro();}@OverridepublicvoidactionPerformed(ActionEventevt){if(evt.getSource()==this.btBuscar){try{ClienteDAOdao=newClienteDAO();ArrayList<Cliente>clientes=newArrayList<Cliente>();clientes=dao.buscar(this.tfBusca.getText());for(Clientecliente:clientes){this.lmClientes.add(1,cliente.getNome());//modificado!// adicionar a partir do 1 para o título ficar na posição zero}this.ltClientes.setModel(this.lmClientes);}catch(Exceptione){e.printStackTrace();}}}}
FmInserirCadastro.java
importjava.awt.GridLayout;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjavax.swing.JButton;importjavax.swing.JComboBox;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JMenu;importjavax.swing.JMenuBar;importjavax.swing.JMenuItem;importjavax.swing.JTextField;publicclassFmInserirCadastroimplementsActionListener{privateJFramejanela=newJFrame("Inserir Cadastro");privateJMenuBarmenuBar=newJMenuBar();privateJMenuPrincipal=newJMenu("Principal");privateJMenuItemsair=newJMenuItem("Sair");privateJTextFieldtfNome=newJTextField();privateJTextFieldtfRg=newJTextField();privateJTextFieldtfNascimento=newJTextField();privateJComboBoxcbSexo=newJComboBox();privateJButtonbtSalvar=newJButton("Salvar");privateJLabellbNome=newJLabel("Nome: ");privateJLabellbRg=newJLabel("RG: ");privateJLabellbSexo=newJLabel("Sexo: ");privateJLabellbNascimento=newJLabel("Data de Nascimento: ");privateClientenovoCliente=newCliente();// construtorpublicFmInserirCadastro(){janela.setVisible(true);janela.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);// modificado!// o método é estático, logo refencie a classe e não o objetojanela.setResizable(false);this.Principal.add(this.sair);this.menuBar.add(this.Principal);janela.setJMenuBar(this.menuBar);janela.setLayout(newGridLayout(5,2));janela.add(this.lbNome);janela.add(this.tfNome);janela.add(this.lbRg);janela.add(this.tfRg);janela.add(this.lbSexo);janela.add(this.cbSexo);this.cbSexo.addItem("Masculino");this.cbSexo.addItem("Feminino");janela.add(this.lbNascimento);janela.add(this.tfNascimento);janela.add(this.btSalvar);this.btSalvar.addActionListener(this);this.sair.addActionListener(this);janela.pack();}publicstaticvoidmain(String[]args){newFmInserirCadastro();}@OverridepublicvoidactionPerformed(ActionEventevt){if(evt.getSource()==this.btSalvar){// ////verificarif(!this.tfNome.getText().equals("")&&!this.tfNascimento.getText().equals("")&&!this.tfRg.getText().equals("")){this.novoCliente.setNome(this.tfNome.getText());this.novoCliente.setRG(this.tfRg.getText());this.novoCliente.setDataNascimento(this.tfNascimento.getText());Stringsexo=(String)this.cbSexo.getSelectedItem();this.novoCliente.setSexo(sexo);try{ClienteDAOdao=newClienteDAO();dao.adiciona(novoCliente);}catch(Exceptione){javax.swing.JOptionPane.showMessageDialog(null,"Erro ao inserir no banco de dados");}}else{javax.swing.JOptionPane.showMessageDialog(null,"Todos os campos devem ser preenchidos!");}}elseif(evt.getSource()==this.sair){this.janela.dispose();}}}
M
marcobiscaro2112
Observação: a consulta funciona, mas quando consultamos várias vezes, o resultado anterior não é apagado. Tem que modificar e ficaria assim:
FmExcluirCadastro.java
importjava.awt.GridLayout;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.util.ArrayList;importjavax.swing.DefaultListModel;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JList;importjavax.swing.JPanel;importjavax.swing.JTextField;publicclassFmExcluirCadastroimplementsActionListener{privateJFramejanela=newJFrame("Excluir Cadastro");privateJPanelpnBusca=newJPanel();privateJPanelpnResult=newJPanel();privateJLabellbBuscar=newJLabel("Buscar: ");privateJTextFieldtfBusca=newJTextField(5);// modificado!// ao invés de colocar espaços vazios, use isso para definir o tamanhoprivateJButtonbtBuscar=newJButton("Ir");privateJButtonbtExcluir=newJButton("Excluir");privateJListltClientes=newJList();privateDefaultListModellmClientes=newDefaultListModel();publicFmExcluirCadastro(){this.janela.setVisible(true);this.janela.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);this.janela.setResizable(false);this.janela.setLayout(newGridLayout(1,2));// this.tfBusca.setText("");// modificado!// vide anotação acimathis.btBuscar.addActionListener(this);this.pnBusca.add(this.lbBuscar);this.pnBusca.add(this.tfBusca);this.pnBusca.add(this.btBuscar);this.pnResult.setLayout(newGridLayout(2,2));this.pnResult.add(this.ltClientes);this.pnResult.add(this.btExcluir);this.janela.add(this.pnBusca);this.janela.add(this.pnResult);// this.lmClientes.add(0, "Clientes:");// modificado!!this.ltClientes.setModel(this.lmClientes);this.janela.setSize(200,200);// this.janela.pack();// modificado!// mudei o tamanho para aparecer a JList inteira}publicstaticvoidmain(String[]args){newFmExcluirCadastro();}@OverridepublicvoidactionPerformed(ActionEventevt){if(evt.getSource()==this.btBuscar){try{ClienteDAOdao=newClienteDAO();ArrayList<Cliente>clientes=newArrayList<Cliente>();clientes=dao.buscar(this.tfBusca.getText());this.lmClientes.removeAllElements();this.lmClientes.add(0,"Clientes:");// modificado!!!for(Clientecliente:clientes){this.lmClientes.add(1,cliente.getNome());//modificado!// adicionar a partir do 1 para o título ficar na posição zero}this.ltClientes.setModel(this.lmClientes);}catch(Exceptione){e.printStackTrace();}}}}
robsonperassoli
Ahaaaa, o que a mão de alguém que sabe não faz né…
Muito obrigado mesmo!!!
A busca funcionou perfeitamente, porém a inserção não…
muito obrigado pelagrande ajuda, de pessoas assim que precisamos na comunidade, dispostas a ajudar.
Agradecido.
M
marcobiscaro2112
De nada. Mas a comunidade é isso: ajuda mútua. Agora também aprendi mais!
Quanto ao inserir, aqui funcionou direitinho! Mas acho que amanhã será melhor para resolvermos isso. Que tal?
Abraços!
Boa noite.
robsonperassoli
Concordo, vou tentar resolver, caso não conseguir recorro ao fórum, obrigado novamente.