seguinte, fiz um codigo para guardar as informações do banco de dados em um array, segue abaixo:
String[][] dados;
dados = new String[1000][1000];
try{
Class.forName("org.firebirdsql.jdbc.FBDriver");
conexao = DriverManager.getConnection("jdbc:firebirdsql:localhost/3050:C:\\teste\\CADASTROS.FDB","SYSDBA","masterkey");
statement = conexao.createStatement();
resultset = statement.executeQuery("select * from tb_clientes");
//guardando dados no array
int linha = 0;
while (resultset.next()){
dados[linha][0] = resultset.getString("cod");
dados[linha][1] = resultset.getString("nome");
dados[linha][2] = resultset.getString("endereco");
dados[linha][3] = resultset.getString("email");
dados[linha][4] = resultset.getString("telefone");
dados[linha][5] = resultset.getString("estado");
dados[linha][6] = resultset.getString("sexo");
dados[linha][7] = resultset.getString("interesses");
dados[linha][8] = resultset.getString("biografia");
dados[linha][9] = resultset.getString("dat");
linha++;
}
//exibindo array
int x=0;
for(int i=0 ; i<2 ; i++){
while(x<9){
System.out.println("dados["+i+"]["+x+"]" + dados[i][x]);
x++;
}
}
}
catch(ClassNotFoundException Driver){
JOptionPane.showMessageDialog(null, "DRIVER NAO LOCALIZADO");
}
catch(SQLException Fonte){
JOptionPane.showMessageDialog(null, "erro na conexão com a fonte");
}
beleza funciona legal!
porem, pesquisando verifiquei que ficaria melhor guardar os dados em uma classe e depois instaciar objetos.
entao criei a classe cleinte:
public class Cliente {
private String cod;
private String nome;
private String endereco;
private String email;
private String telefone;
private String estado;
private String sexo;
private String interesses;
private String biografia;
private String dat;
//e os get e set desses atributos!
ae fui fazer a parte de adicionar os dados a esses atributos.
ficou assim:
try{
Class.forName("org.firebirdsql.jdbc.FBDriver");
conexao = DriverManager.getConnection("jdbc:firebirdsql:localhost/3050:C:\\teste\\CADASTROS.FDB","SYSDBA","masterkey");
statement = conexao.createStatement();
resultset = statement.executeQuery("select * from tb_clientes");
//verificando quando registros ha no banco!
int i=0;
while(resultset.next()){
i++;
}
System.out.println(i);
//zerando o resultset
resultset = statement.executeQuery("select * from tb_clientes");
//colocando nos objetos
int x = i;
Cliente[] cliente = new Cliente[x];
while(resultset.next()){
for (int y = 0; y < x; y++){
cliente[i] = new Cliente();
cliente[i].setNome(resultset.getString("cod"));
}
}
}
catch(ClassNotFoundException Driver){
JOptionPane.showMessageDialog(null, "DRIVER NAO LOCALIZADO");
}
catch(SQLException Fonte){
JOptionPane.showMessageDialog(null, "erro na conexão com a fonte");
}
porem ocorre o erro:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
at guardardadosemarray.GuardarDadosDoBancoNoObjeto.atualizarArray(GuardarDadosDoBancoNoObjeto.java:41)
at guardardadosemarray.ClassePrincipal.main(ClassePrincipal.java:19)
Java Result: 1
alguem saberia me ajudar??
Brother,
Não entendi a necessidade de utilizar o array em si.
Que tal criar uma lista de clientes?
List<Cliente> clientes = new ArrayList<Cliente>();
while(resultset.next()){
Cliente cliente = new Cliente();
cliente.setCod(...);
cliente.setNome(...);
clientes.add(cliente);
}
pq dps vou precisar fazer um pesquisa neste dados…
to pesquisando, quando conseguir posto aqui
se alguem tiver dicas eu agradeço
E qual é o problema de trabalhar com o list?
depois é só fazer um FORzinho para pegar os dados:
for(int i=0; i < clientes.size(); i++){
Cliente cliente = clientes.get(i);
syso("Nome: "+cliente.getNome());
}
usei a lista como voce indicou luisgarcia173
meu codigo ficou assim:
public void atualizarArray(){
try{
Class.forName("org.firebirdsql.jdbc.FBDriver");
conexao = DriverManager.getConnection("jdbc:firebirdsql:localhost/3050:C:\\teste\\CADASTROS.FDB","SYSDBA","masterkey");
statement = conexao.createStatement();
resultset = statement.executeQuery("select * from tb_clientes");
//verificando quando registros ha no banco!
int i=0;
while(resultset.next()){
i++;
}
System.out.println("numero de registros no banco: " + i);
//zerando o resultset
resultset = statement.executeQuery("select * from tb_clientes");
//colocando nos objetos
List<Cliente> listaCliente = new ArrayList<Cliente>();
while (resultset.next()){
Cliente cliente = new Cliente();
cliente = new Cliente();
cliente.setCod(resultset.getString("cod"));
cliente.setNome(resultset.getString("nome"));
cliente.setEndereco(resultset.getString("endereco"));
cliente.setEmail(resultset.getString("email"));
cliente.setTelefone(resultset.getString("telefone"));
cliente.setEstado(resultset.getString("estado"));
cliente.setSexo(resultset.getString("sexo"));
cliente.setInteresses(resultset.getString("interesses"));
cliente.setBiografia(resultset.getString("biografia"));
cliente.setDat(resultset.getString("dat"));
listaCliente.add(cliente);
}
//exibindo clientes
for(int x = 0; x<listaCliente.size();x++){
System.out.println(listaCliente.get(x).getCod() + " ---- " + listaCliente.get(x).getNome() + " ---- " + listaCliente.get(x).getEndereco() + " ---- " + listaCliente.get(x).getEmail() + " ---- " + listaCliente.get(x).getTelefone() + " ---- " + listaCliente.get(x).getEstado() + " ---- " + listaCliente.get(x).getSexo() + " ---- " + listaCliente.get(x).getInteresses() + " ---- " + listaCliente.get(x).getBiografia() + " ---- " + listaCliente.get(x).getDat());
}
}
catch(ClassNotFoundException Driver){
JOptionPane.showMessageDialog(null, "DRIVER NAO LOCALIZADO");
}
catch(SQLException Fonte){
JOptionPane.showMessageDialog(null, "erro na conexão com a fonte");
}
}
que tal?
Se funcionou é o que importa. Agora é se ir melhorando seu código conforma vai ganhando experiência, tipo separar classe de conexao e etc.
Mas uma dica legal, sobrescrever o toString da sa classe.
//Na sua classe cliente coloque
public String toString(){
return "Código: "+this.cod+
" Nome: "+this.nome+
" Endereço: "+this.endereco+
....;
}
Depois fica mais elegante ainda o seu FORzinho:
for(int x = 0; x<listaCliente.size();x++){
listaCliente.get(x).toString();
}
>
fiz isso que voce falou, mas nao esta exibindo nada na tela Oo
da uma olha:
classe cliente
private String cod;
private String nome;
private String endereco;
private String email;
private String telefone;
private String estado;
private String sexo;
private String interesses;
private String biografia;
private String dat;
public String toString(){
return "cod: "+this.cod+
" nome: "+this.nome;
}
//mais os get's e set's
e o metodo que passa pros objetos os dados do banco de dados e depois mostra eles:
public void atualizarArray(){
try{
Class.forName("org.firebirdsql.jdbc.FBDriver");
conexao = DriverManager.getConnection("jdbc:firebirdsql:localhost/3050:C:\\teste\\CADASTROS.FDB","SYSDBA","masterkey");
statement = conexao.createStatement();
resultset = statement.executeQuery("select * from tb_clientes");
//verificando quando registros ha no banco!
int i=0;
while(resultset.next()){
i++;
}
System.out.println("numero de registros no banco: " + i);
//zerando o resultset
resultset = statement.executeQuery("select * from tb_clientes");
//colocando nos objetos
List<Cliente> listaCliente = new ArrayList<Cliente>();
while (resultset.next()){
Cliente cliente = new Cliente();
cliente = new Cliente();
cliente.setCod(resultset.getString("cod"));
cliente.setNome(resultset.getString("nome"));
cliente.setEndereco(resultset.getString("endereco"));
cliente.setEmail(resultset.getString("email"));
cliente.setTelefone(resultset.getString("telefone"));
cliente.setEstado(resultset.getString("estado"));
cliente.setSexo(resultset.getString("sexo"));
cliente.setInteresses(resultset.getString("interesses"));
cliente.setBiografia(resultset.getString("biografia"));
cliente.setDat(resultset.getString("dat"));
listaCliente.add(cliente);
}
//exibindo clientes
for(int x = 0; x<listaCliente.size();x++){
listaCliente.get(x).toString();
}
//pesquisando por data na list.
}
catch(ClassNotFoundException Driver){
JOptionPane.showMessageDialog(null, "DRIVER NAO LOCALIZADO");
}
catch(SQLException Fonte){
JOptionPane.showMessageDialog(null, "erro na conexão com a fonte");
}
}
i ae? executo e nao aparece nada na tela =/
Kkkk, foi mal!!!
System.out.println( listaCliente.get(x).toString());
mal digo eu! nem me dei conta KKKKKKKKK
valeu cara, me fez ganhar a tarde ;D
É nóis parcero!!!
depois mete [RESOLVIDO] no assunto do post!!!
Abraço.
ok, coloquei ali!
desculpa o abuso!
mas agora como eu faço para psquisar nesses objetos
por exemplo, quero pesquisar pelo atributo data!
vou digitar uma data (no mesmo formato que ela se encontra)
e quero que venha todos os clientes que possuem a mesma data…
se puder ajudar lhe agradeço
[]'s
simples e rápido vc pode usar o seu for e comparar data.
for(int x=0; x < listaCliente.size(); x++){
if(listaCliente.get(x).getData().equals(dataComparacao)){
System.out.println(listaCliente.get(x).toString());
}
}
ou mais elegante, criando um toCompare na sua classe Cliente
//implementar Comparable
public Cliente implements Comparable<Cliente>{
//atributos
//gets e sets
//tostring
// retorna 0(zero) se for igual
public int toCompare(Cliente c){
return this.getData.toCompare(c.getData);
}
}
//sua classe que tem a lista de clientes
Cliente clienteFiltro = new Cliente();
clienteFiltro.setData(...);
for(int x=0; x < listaCliente.size(); x++){
Cliente clienteRetornado = listaCliente.get(x);
if(clienteRetornado.toCompare(clienteFiltro) == 0){
System.out.println(clienteRetornado.toString());
}
}
Blz?
Detalhe, não testei!
Não lembro se data compara com .equals que nem String, se não me engano tem que usar uns métodos do Calendar, mas qq coisa já tem o caminho das pedras!