[RESOLVIDO] Retorno da query

Bom dia galera do Guj!

Estou envolvido em um projeto onde estamos convertendo um sistema em php para java web!
Meu problema é o seguinte: me deparei com seguinte codigo:

$conn= mysql_connect('url', 'login', 'senha');
mysql_select_db ('banco');
$consulta =  mysql_query("Select aplicacao, modulo, rotina from acessos where usuario like 'login'");

return $consulta

No java, esse consulta seria um resultset. Esse retorno e mandado para uma aplicacao flex que popula um datagrid. Acontece que o carregamento dos dados é feito como se o retorno fosse um tipo de tabela que armazena o nome do campo ( no caso , aplicacao, modulo e rotina ) e os valores lidos do banco. Ai o acesso e setado pelos nomes dos campos. Ex: caixa de texto ‘empresa’ recebe o campo ‘aplicacao’ do retorno.

Fui tentar fazer a mesma coisa no Java, mas não deu certo!
Alguem tem alguma ideia do q pode ser feito para obter-se o mesmo resultado??

Aquele abraçooo!!

Isso é PHP :?:

Sim…

:stuck_out_tongue:

Bom dia.

Simples, crie um objeto com os campos e tipos que você precisa, use o resultset para popular esse objeto, criando uma lista de objetos desse tipo e o repasse para a tela Flex.

Abraços.

Bom dia nel !

Obrigado pela resposta!!

Sem querer abusar da sua boa vontade, voce poderia me dar um exemplo??
Guardar os valores do resultset e tranquilo… so nao sei como seria para guardar os campos… =/

Abraçooo

[quote=lucasgcp]Bom dia nel !

Obrigado pela resposta!!

Sem querer abusar da sua boa vontade, voce poderia me dar um exemplo??
Guardar os valores do resultset e tranquilo… so nao sei como seria para guardar os campos… =/

Abraçooo[/quote]

Claro.
Talvez eu também não tenha sido claro.
Vamos lá!

[code]public class SuaClasse {
String aplicacao;
String modulo;
String rotina ;

//getters and setters
}[/code]

[code]public class SeuDao {
//considere rs = resultset ja populado
List listSuaClasse = new ArrayList();
while(rs.next()) {
SuaClasse objeto = new SuaClasse();
objeto.setAplicacao(rs.getString(“aplicacao”));
//outros setters

  listSuaClasse.add(objeto);

}
return listSuaClasse;
[/code]

Obviamente, foi um exemplo bem simples (estou no trabalho) e podes dar nomes mais significativos e coloquei tudo como String.
Podes adicionar o tipo correto. E logicamente, a classe SeuDao vai ter um método que faça o que lhe mostrei.

Edit: havia esquecido de adicionar o objeto a lista.

Espero te-lo ajudado.
Abraços.

Mas assim eu teria objetos apenas com os valores do resultset, nao??

O codigo do datagride do flex é assim :

		<mx:DataGrid 
			x="0" y="0" width="690" height="146" 
			id="customersGrid" editable="true" 
			itemEditEnd="handleItemEditEnd(event)"
			change="handleSelectionChange(event)">
			<mx:columns>
				<mx:DataGridColumn headerText="aplicacao" dataField="aplicacao" />
				<mx:DataGridColumn headerText="modulo" dataField="modulo" />
				<mx:DataGridColumn headerText="rotina" dataField="rotina" />
				<mx:DataGridColumn headerText="descricao" dataField="descricao" />
				<mx:DataGridColumn headerText="programa" dataField="programa" />           
			</mx:columns>
		</mx:DataGrid>

O dataField é que fica responsavel por preencher o datagrid. Quando retornasse o objeto, ele reconheceria quem é o campo aplicacao, modulo e rotina nesse objeto??

Achuuu q intendi!!

O acesso que eu iria fazer seria atraves do obj[indice].aplicacao neh?

Então, lembro-me pouco do Flex e como ele acessa os valores de um objeto!
Veja exemplos na net de como ele faz isso, deve ter inúmeros.

Mas creio que o datafield tenha que ter obrigatoriamente o mesmo nome do seu campo, pois ele deve dar um get.
Ou seja, se disse que o datafield é aplicacao, seu objeto da lista deve ter um getAplicacao().
Estou supondo.

Não esqueça de dizer ao datagrid quem é sua lista.
Abraços.

É exatamente como eu disse, veja aqui!

Abraços.

Ahhh intendiii!!

:smiley:

So mais uma coisa: no caso o dataProvider do meu datagrid iria ser o meu objeto retornado??

=/

Isso!
Seria a lista com os seus objetos.

Como dei o exemplo, seria: dataprovider={listSuaClasse}
Ou seja, passe ao dataprovider a sua lista de objetos :slight_smile:

Caraaa!! Você me ajudou bastantee!!

Brigadãooo!!

Só mais uma coisinha: como se trata de um retorno, eu vo ter que setar o dataProvider do dataGrid pelo actionScript… qual o tipo que eu declaro a variavel do action script??

Object mesmo, ArrayCollections ou o q?

Abraçãooo

Rapaz, está forçando bastante a minha memória! rss.
Ao que me lembro, apenas Array mesmo.

Caso não funcione, teste com ArrayCollections.
Mas a principio, seria Array a = new Array();

Algo assim!

AUEEauaeUAEAUEUahuaehUAEHUa

Brigadao pela ajuda amigo!

Ainda nao deu certo nao, mas daqui pra frente eu me viro!!

Muito obrigado!!

Forte abraço!

[quote=lucasgcp]AUEEauaeUAEAUEUahuaehUAEHUa

Brigadao pela ajuda amigo!

Ainda nao deu certo nao, mas daqui pra frente eu me viro!!

Muito obrigado!!

Forte abraço![/quote]

Opa!
Aqui ó, para lhe ajudar: http://www.arquivodecodigos.net/dicas/adobe-flex-como-preencher-um-datagrid-a-partir-de-um-arraycollection-usando-actionscript-1867.html

Abraços!

Dei uma olhada no link que vc mando… Achava que tinha feito a mesma coisa, mas nao deu certo ainda… =/

Classe Java :

public class Dados {

	public String aplicacao;
	public String modulo;
	public String rotina;
	
	public void setAplicacao(String a){
		this.aplicacao = a;
	}
	public void setModulo(String m){
		this.modulo = m;
	}
	public void setRotina(String r){
		this.rotina = r;
	}
	
	public String getAplicacao(){
		return this.aplicacao;
	}
	
	public String getModulo(){
		return this.modulo;
	}
	
	public String getRotina(){
		return this.rotina;
	}
}

Metodo Java para preencher o List:

            List<Dados> listaDados = new ArrayList<Dados>();  
            while(result.next()){
            	Dados d = new Dados();  
            	d.setAplicacao(result.getString("aplicacao"));  
            	d.setModulo(result.getString("modulo"));  
            	
            	listaDados.add(d);
            }
            
            return listaDados;

DataGrid :

		<mx:DataGrid x="86" y="60" width="463" height="200" id="customersGrid">  
			 <mx:columns>  
					<mx:DataGridColumn headerText="Aplicacao" dataField="aplicacao"/>  
					<mx:DataGridColumn headerText="Modulo" dataField="modulo"/>  
				 	<mx:DataGridColumn headerText="Rotina" dataField="rotina"/>  
			</mx:columns>  
		</mx:DataGrid>  

Metodo ActionScript :

                      private function init():void
			{
				customersDataService.TesteDados();                
			}
			public function receivedCustomerRecords( event:ResultEvent ):void
			{
				customersGrid.dataProvider = new ArrayCollection( event.result as Array );
			}

Ele retorna 3 objects direitin… mas os dados nao aparecem no grid!!
Ta tenso viu! Apanhando tanto pra fazer uma coisa taoo bobaa!!
:oops:

O amigo, cade a propriedade dataprovider no seu datagrid? :slight_smile:

Isso que to em duvida…

Eu coloco o que no meu dataProvider nesse caso??

Pq se fosse uma variavel actionScript quando construisse a pagina e carregasse o grid, a variavel ainda estaria vazia… ou não?

de qualquer forma tentei alterar assim:

[Bindable]
public var Lista: ArrayCollection;
private function init():void
{
	customersDataService.TesteDados();                
}
public function receivedCustomerRecords( event:ResultEvent ):void
{
	Lista = new ArrayCollection( event.result as Array );
}

E o grid assim :

<mx:DataGrid x="86" y="60" width="463" height="200" dataProvider="{Lista}" id="customersGrid">  
			 <mx:columns>  
					<mx:DataGridColumn headerText="Aplicacao" dataField="aplicacao"/>  
					<mx:DataGridColumn headerText="Modulo" dataField="modulo"/>  
				 	<mx:DataGridColumn headerText="Rotina" dataField="rotina"/>  
			</mx:columns>  
		</mx:DataGrid>  

Mas tambem nao obtive sucesso…

Bom, o que posso aconselhar você é a debugar a parte flex.
A Adobe possui um plugin que permite isso, no Eclipse eu sei que tem.

Veja se sua lista está sendo populada corretamente.
Só um detalhe, não se dá nome a variavéis com a primeira lestra maiscula, ok?! :slight_smile:

Bom, agora é pesquisar.
Abraços!