[RESOLVIDO] Retorno da query

24 respostas
L

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!!

24 Respostas

drigo.angelo

Isso é PHP :?:

L

Sim…

:stuck_out_tongue:

nel

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.

L

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

nel
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

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

public class SuaClasse {
String aplicacao;
String modulo;
String rotina ;

//getters and setters
}
public class SeuDao {
   //considere rs = resultset ja populado
  List<SuaClasse> listSuaClasse = new ArrayList<SuaClasse>();
  while(rs.next()) {
      SuaClasse objeto = new SuaClasse();
      objeto.setAplicacao(rs.getString("aplicacao"));
      //outros setters

      listSuaClasse.add(objeto);
   }
  return listSuaClasse;

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.

L

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??

L

Achuuu q intendi!!

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

nel

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.

nel

É exatamente como eu disse, veja aqui!

Abraços.

L

Ahhh intendiii!!

:smiley:

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

=/

nel

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:

L

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

nel

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!

L

AUEEauaeUAEAUEUahuaehUAEHUa

Brigadao pela ajuda amigo!

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

Muito obrigado!!

Forte abraço!

nel

lucasgcp:
AUEEauaeUAEAUEUahuaehUAEHUa

Brigadao pela ajuda amigo!

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

Muito obrigado!!

Forte abraço!

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!

L

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:

nel

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

L

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…

nel

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!

L

^.^

Ja fiz a alteração!!
Vou fritar mais um pouco com isso aki!

De qualquer forma, MTUUU obrigado pela força!
Ajudou bastante!

Abraços!

nel

Isso aqui vai lhe ajudar bastante :slight_smile:

L

Consigui resolver nel!!

\o/

Tava era dando um vacilo tremendo na hora de carregar a pagina flex!
xD

Agora to apanhando é pra popular um menu tree! :evil:

Brigadao pela ajuda!

nel

lucasgcp:
Consigui resolver nel!!

\o/

Tava era dando um vacilo tremendo na hora de carregar a pagina flex!
xD

Agora to apanhando é pra popular um menu tree! :evil:

Brigadao pela ajuda!

Show de bola.
É assim que se aprende :slight_smile:

Apenas mostre a solução adotada e adicione [Resolvido] ao l ado do seu tópico ok!?
Abraços!

L

Ok!

Eu nao tava chamando o metodo pra inicializar a variavel quando a pagina era criada!
Assim quando ele construia a pagina e carregava o dataProvider do Tree, a lista estava vazia ainda!

Ai foi so adicionar o creationComplete no mx:Application :

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="730" height="355"
creationComplete="init()" viewSourceURL="srcview/index.html">

xD

Criado 28 de março de 2011
Ultima resposta 29 de mar. de 2011
Respostas 24
Participantes 3