Ajuda em erro de List plz!

7 respostas
P

Olá pessoal !!
Estou com um pequeno probleminha. Estou querendo listar a quantidade de tabelas em um database com list. Estou anexando o código abaixo:

public String nomes = null;
	public List<String> tabelas;
	
	public Main(){

		try{
			Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
                        
                         ...

			Statement stmnt = conn.createStatement();
			ResultSet rs = stmnt.executeQuery("select name from sysobjects where type = 'U'");
			
			while(rs.next()){
				tabelas.add(rs.getString(1));			
				tabelas.add("\n");
			}
			for(int i = 0;i<tabelas.size();i++){
				nomes += tabelas.get(i);
			}
			JOptionPane.showMessageDialog(null,nomes,"sysobjects",JOptionPane.INFORMATION_MESSAGE);
			
		}catch(Exception e){
			JOptionPane.showMessageDialog(null, e.getStackTrace(),"Erro",JOptionPane.ERROR_MESSAGE);
		}

	}

Desde já agradeco pessoal !! :grin:
>

7 Respostas

F

Qual erro acontece?

Algumas dicas:

  • Vc pode usar a própria api do jdbc para fazer isso:
DatabaseMetaData dbData = connection.getMetaData();
ResultSet rs = dbData.getTables(this.catalog, this.schema, null, null);
  • Vc está acumulando as tables na String nomes. Isso não tem um desempenho bom, use StringBuilder.
P

Esse objeto do JDBC funciona como uma lista ? Certo. Vamos dizer que funcione. Ele roda fora do JDBC? eu estou querendo ultilizar o objeto List pra outras coisas também, e se enquadram ao estilo deste código que provavelmente irão ter retorno do mesmo erro. o erro que está me retornando no debug é: [Ljava.lang.StackTraceElement;@112f614. E em String é:

“principal.Main<init>(Main.java:26)”

E outra coisa. Se eu substituir o List por Element, faz alguma diferença ou é apenas outro objeto que funciona da mesma maneira? O List ou o Element seriam inadequados pra mim armazenar cadastros como se fossem tabelas temporárias ?

Se poder me ajudar nessas questões agradeceria muito. Vlw.

F

Após retornar o ResultSet é só seguir com o teu algoritmo.
No caso vc está colocando numa List<String>, pode ser o mesmo.

P

Agora estou em outra situação. Eu substitui o List por JList. Até aí tudo certo. Só q to querendo q o JOptionPane retorne o valor do que está selecionado no JList.

Statement stmnt = conn.createStatement();
			ResultSet rs = stmnt.executeQuery("select name from sysobjects where type = 'U'");
			listaNomes = new JList();
			while(rs.next()){
				listModel.addElement(rs.getString(1));
			}			
			scrolPane = new JScrollPane(listaNomes);
			listaNomes.setModel(listModel);
			listaNomes.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
			JOptionPane.showMessageDialog(null,scrolPane,"sysobjects",JOptionPane.INFORMATION_MESSAGE);
			
		}catch(Exception e){
			JOptionPane.showMessageDialog(null, e.getStackTrace(),"Erro",JOptionPane.ERROR_MESSAGE);
			System.out.println(e.getStackTrace());
		}

Vlw ae quem me ajudar. Desde já agradeço. :grin:

F

Para retornar o selecionado num JList é:

listaNomes.getSelectedValue()
P

Sei. Mas então quando clico em OK do JOptionPane ele irá retornar este objeto?

F

Ah, ok, agora entendi.

Ele em si não vai o valor da seleção na lista, mas sim de acordo com o botão pressionado.
Faz o seguinte, depois de chamar o JOptionPane consulta a JList com o método que passei antes. Deve retornar o selecionado.

Criado 8 de julho de 2009
Ultima resposta 8 de jul. de 2009
Respostas 7
Participantes 2