[RESOLVIDO] Retorno do Array no console sai assim : [[Ljava.lang.String;@d19bc8]

Boa tarde a todos,

Sou novo aqui no forum... E estou com um problema com Array. Seria o seguinte : 

Tenho essa classe DAO, que esta dentro do pacote Persistence que faz uma consulta no banco de dados :

public List<Cargos> selectTodos(){ List<Cargos> listCargos = new ArrayList<Cargos>(); Connection conn = FabricaDB.getInstance().getConnection(); String SQL = "SELECT * FROM CARGOS"; try { PreparedStatement stmt = conn.prepareStatement(SQL); boolean result = stmt.execute(); if (result == true) { ResultSet rs = null; rs = stmt.getResultSet(); while (rs.next()){ Cargos cargo = new Cargos(); cargo.setCodigo(rs.getInt("CODIGO")); cargo.setcodProfissao(rs.getInt("COD_PROFISSAO")); cargo.setDescricao(rs.getString("DESCRICAO")); listCargos.add(cargo); } return listCargos; }else { System.out.println("SQL retornou False"); return null; } } catch (SQLException e) { System.out.println("Erro na execução do SQL " + e.getMessage()); return null; } }

Tenho essa classe Cargos que esta dentro do pacote model que faz a chamada desse metodo :


	public List<Cargos> selectTodos(){
		CargosDAO crgDAO = new CargosDAO(); 
		List<Cargos> cargos = crgDAO.selectTodos();  
		return cargos;
	}

Tenho essa classe CargosCNTR que esta dentro do pacote controler que faz a chamada do metodo da classe model e passa ela para um List de Strings

public class CargosCNTR {
	public List<String[]> SelectTODOS(){
		Cargos crg                    = new Cargos();
		List<Cargos> listaCargos      = crg.selectTodos();
		List<String[]> vetlistaCargos = new ArrayList<String[]>();
		String[] vBuffer              = new String[3]; 
		for (int i = 0; i < listaCargos.size(); i++){
			vBuffer[0] = String.valueOf(listaCargos.get(i).getCodigo());
			vBuffer[1] = String.valueOf(listaCargos.get(i).getcodProfissao());
			vBuffer[2] = listaCargos.get(i).getDescricao();
			vetlistaCargos.add(vBuffer);
	    }
		return vetlistaCargos;
	};

Bom… Seria assim : O Model solicita o DAO, que faz a consulta no banco de dados e passa para ele, o controller pega esses dados do model, e passa para um Array de Strings. Bom o problema e que quando vou chamar esse controler na view dessa forma

	public static void main(String[] args) {
		int i;
		CargosCNTR crgCNTR = new CargosCNTR();
		crgCNTR.SelectTODOS(); 
		List<String[]> listCargos = crgCNTR.SelectTODOS(); 
		System.out.println(listCargos); 
	}

}

O retorno que sai no console sai assim : [[Ljava.lang.String;@14a8cd1], Todo o codigo esta funcionando, mais acredito que deva ser algum problema de formatacao. Mais nao estou conseguindo enxergar onde possa ser… Alguem se habilita em me ajudar ? Aproveito para perguntar, o que dizem do metodo de busca e da separacao das classes !!! Agradeço antecipadamente…

     List<String[]> listClientes = crgCNTR.SelectTODOS();   
     for (String[] clientes : listClientes) {
         for (String cliente : clientes) {
             System.out.println (cliente);
         }
     }

Da onde vc copiou o código?

Copiei de local nenhum nao, escrevi client errado no final do codigo mesmo…Na verdade fui vendo alguns exemplos…e acabei chegando nisso ae… Por isso gostaria de saber se a forma indicada de fazer seria dessa forma mesmo !!!

hummm sei… vc fez tudo isso, usando DAO e etc. E no Sysout vc poe a list pra imprimir invez dos itens dela…
legal

[quote=felipehand]hummm sei… vc fez tudo isso, usando DAO e etc. E no Sysout vc poe a list pra imprimir invez dos itens dela…
legal[/quote]

O que o colega aqui quer dizer é que vc tá mandando o objeto direto pro SysOut

E pelo menos em teoria alguém que conhece realmente java, já saberia que isso vai printar a referencia do objeto

Então eu estou assumindo que ele assumiu que vc não sabe muita coisa então explico-lhe:

public static void main(String[] args) {
int i;
CargosCNTR crgCNTR = new CargosCNTR();
crgCNTR.SelectTODOS();
List<String[]> listCargos = crgCNTR.SelectTODOS();
System.out.println(listCargos); ----------------------------- Aqui use um for each pois é uma coleção, e o .toString dela vai apontar a referência e não o conteudo.
}

[quote=felipehand]hummm sei… vc fez tudo isso, usando DAO e etc. E no Sysout vc poe a list pra imprimir invez dos itens dela…
legal[/quote]

Pow, Felipe de boa cara… se voce acha que nao… tudo bem… hehehe…(O jeito de falar e apenas uma bricadeira, em cara, mais fiz sim realmente o codigo…)

		Cargos crg = new Cargos();
		List<Cargos> listaCargos =  crg.selectTodos();
		for (int i = 0; i < listaCargos.size(); i++){
			System.out.print(listaCargos.get(i).getCodigo() + " "); 
			System.out.print(String.valueOf(listaCargos.get(i).getcodProfissao()) + " "); 
			System.out.print(String.valueOf(listaCargos.get(i).getDescricao()) + " " );
			System.out.println(); 
		}
	}

enantiomero,

Seguinte cara, eu queria uma saida dessa forma sacou… so que nesse caso estou chamando o model direto de dentro da view e nao seria o correto, pois pelo que entendi a view so enxerga o controler… e quando chamo pela controller nao da certo… dessa forma o que me diz ?

[quote=guerios][quote=felipehand]hummm sei… vc fez tudo isso, usando DAO e etc. E no Sysout vc poe a list pra imprimir invez dos itens dela…
legal[/quote]

O que o colega aqui quer dizer é que vc tá mandando o objeto direto pro SysOut

E pelo menos em teoria alguém que conhece realmente java, já saberia que isso vai printar a referencia do objeto

Então eu estou assumindo que ele assumiu que vc não sabe muita coisa então explico-lhe:

public static void main(String[] args) {
int i;
CargosCNTR crgCNTR = new CargosCNTR();
crgCNTR.SelectTODOS();
List<String[]> listCargos = crgCNTR.SelectTODOS();
System.out.println(listCargos); ----------------------------- Aqui use um for each pois é uma coleção, e o .toString dela vai apontar a referência e não o conteudo.
} [/quote]

Eu entendi o que o amigo felipe quiz dizer rsrs… Algo tao simples para quem fez todo aquele codigo, parece realmente estranho…mais e que ja estou estudando os outros codigos a um tempo, e vi um exemplo na net com essa saida desse jeito, e nao estava conseguindo usar… ae resolvi perguntar !!!

Só um adento, quando você vir um código imprmindo assim:

[[Ljava.lang.String;@d19bc8]

[L Significa que o objeto é um array.

java.lang.String, ou qualquer outro nome, é o tipo do array

e @d19bc8 é o numero da referência para este objeto (o array, não o conteúdo).