Академический Документы
Профессиональный Документы
Культура Документы
Olapessoal,
EssesdiasestavaemcasaacompanhandoumalistadediscussosobreFlex,eentraramno
mrito do AIR com o SQLite. Confesso que j tinha dado uma olhada por cima, mas me
empolguei com a discusso e resolvi fazer um teste com ele para ver como funcionaria.
Confesso que fiquei surpreso com sua facilidade e estou disponibilizando um tutorial
comentado de como fazer uma conexo, insero simples e uma consulta usando esses
recursos.
AversoutilizadaparaodesenvolvimentofoioFlexBuildercomoSDK3.2.
Bom,vamosl.ParaquemnuncacriouumprojetonoFlexparaaplataformaAIR,ouainda
no conhece o ambiente Flex, a tela de criao do projeto em File > New > Flex Project,
iniciamosumprojetocomonomeSQLiteDemo.
NomemoFile>New>ActionScriptClass,iremoscriarumaclasseASpararepresentao
da tabela que iremos criar no SQLite para persistencia de usurios. No decorrer, iremos ver
queosatributosdestaclassesooscamposqueiremoscriarnoSQLiteparaapersistncia.
?
ViewCodeACTIONSCRIPT3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package
{
publicclassUsuario
{
publicvarcd_usuario:Number;
publicvarnm_usuario:String;
publicvards_login
:String;
publicvards_senha
:String;
publicfunctionUsuario()
{
Para quem nunca ouviu falar em SQLite, o SQLite um banco de dados para o uso em
aplicaescomobancoembarcado,ouseja,nonecessrioainstalaodeumSGDBe
demaisconfiguraesparaoseufuncionamento.
OAIRtemsuportenativoaoSQLite,dessaforma,possivelcriarumaaplicaocombanco
de dados embarcado e toda sua instalao ocorre de maneira transparente para o usurio
final, sem precisar fazer nenhuma parametrizao adicional, basta rodar o instalador padro
deumaaplicaoAIReosistemaestarprontoparaouso.
A tabela que ser persistida ser criada em tempo de execuo quando a aplicao for
executada pela primeira vez. Vale lembrar que, esse um tutorial para demonstrar o
funcionamento do AIR com SQLite e no um tutorial de padro de projeto com a
utilizaoAIR+SQLite.
Dentrodoarquivoprincipaldanossaaplicao,iremoscriarumeventoparaqueaofinalizara
criao da aplicao seja feita a conexo com o banco de dados, e a criao da tabela que
utilizaremos.
ViewCodeACTIONSCRIPT3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
importmx.events.FlexEvent;
importmx.controls.Alert;
privatevarsqlConn
:SQLConnection;
privatevardbFile
:File;
privatevarsqlStm
:SQLStatement;
privatevardbPath
:String
="SQLiteDemo.sqlite";
privatevarusuario
:Usuario
=newUsuario();
privatefunctioninitApp():void
{
this.dbFile
=
File.documentsDirectory.resolvePath(this.dbPath);
this.sqlConn
=newSQLConnection();
this.sqlConn.addEventListener(SQLEvent.OPEN,
onSQLOpenEvent);
this.sqlConn.addEventListener(SQLErrorEvent.ERROR,
onSQLErroEvent);
this.sqlConn.open(this.dbFile);
}
Nessemomento,noeventocreationComplete(),afunoinitApp()foiexecutada,suafuno
abrir uma conexo com o banco de dados, e em caso de sucesso ou falha, disparar seu
respectivoevento.
Nessetutorial,novouentraremdetalhessobreeventos,umavezqueoobjetivodomesmo
ousodoSQLiteenosobreActionScript.
Algumas variaveis foram declaradas no inicio da aplicao, vamos a uma breve descrio
sobrecadaumadelas:
sqlConn:Usadaparaaconexocomobancodedados
dbFile:Usadaparaarmazenaroarquivoaondeestaobancodedados
sqlStm:SQLStatementpadraoparaexecutarquerysnobancodedados
dbPath:Pathdobancodedados
usuario:Variavelparaarmazenarousuriologadonosistema
Casoaconexocomobancodedadosocorracomsucesso,afunoonSQLOpenEvent()
disparada:
ViewCodeACTIONSCRIPT3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
privatefunctiononSQLOpenEvent(event:SQLEvent):void
{
varsqlQuery:String="CREATETABLEIFNOTEXISTS
[usuario]([cd_usuario]INTEGERPRIMARYKEYAUTOINCREMENTNOT
NULL,[nm_usuario]VARCHAR(100)NULL,[ds_login]VARCHAR(30)
NULL,[ds_senha]VARCHAR(30)NULL);";
this.sqlStm
=newSQLStatement();
this.sqlStm.sqlConnection
=this.sqlConn;
this.sqlStm.text
=sqlQuery;
this.sqlStm.addEventListener(SQLEvent.RESULT,
onIniciaTabelaResult);
this.sqlStm.execute();
privatefunctiononIniciaTabelaResult(event:SQLEvent):void
{
Alert.show('Appdisponivelparaouso');
}
Aoserdisparada,atabelaqueusaremosnesseexemplocriada.Paraisso,utilizamospela
primeiravez,oSQLStatement,paraqueumainstruoSQLfosseenviadaaobancodedados.
Apenasdoisatributosforamutilizados,otextparaainstruoSQL,eosqlConnection,aonde
informamosnossaconexocomoSQLite.
Tambm foi adicionado um eventListner ao SQLStatement, caso ocorra um sucesso, a
funoonIniciaTabelaResult()disparada,apenascomoobjetivodealertaraousurioquea
aplicaoestdisponivelparaouso.
Bom, agora, iremos criar nossa miniaplicao, que consiste no seguinte: Ser criado um
ViewStack,paraquesejaoprincipalcontainerdaaplicaoefaaagernciadequalcanvas
deveserapresentadoaousuriodeacordocomsuanavegao.
Aaplicaoter3canvas,oprimeiro,comoobjetivodequeousuriodosistemapossafazer
um login, o segundo, com uma tela para que seja possvel seu cadastro, e por ultimo, um
canvascontendoumasaudaocasoseulogintenhasidofeitocomsucesso.
Bom,emalgunsbotesforamadicionadosalgunseventos,eiremoscomentaragoracadaum
deles.
O boto com o label Entrar, do canvas cvnLogin, tem um evento adicionado ao click do
mouse,aonderesponsavelpordispararafunobtnEntrar_clickHandler().
ViewCodeACTIONSCRIPT3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
privatefunctionbtnEntrar_clickHandler():void
{
varsqlQuery:String
="select"+
"*from
[usuario]"+
"where"+
"[ds_login]
='"+this.txtLogin.text+"'and"+
"[ds_senha]
='"+this.txtSenha.text+"'";
this.sqlStm
=new
SQLStatement();
this.sqlStm.sqlConnection
=this.sqlConn;
this.sqlStm.text
=sqlQuery;
this.sqlStm.addEventListener(SQLEvent.RESULT,
onQueryResult);
this.sqlStm.execute();
}
privatefunctiononQueryResult(event:SQLEvent):void
{
varresultado:SQLResult=this.sqlStm.getResult();
if(resultado!=null){
if(resultado.data!=null)
this.vwStack.selectedIndex=2;
varobj:Object
=
resultado.data[0]asObject;
this.usuario.cd_usuario
=
obj['cd_usuario'];
this.usuario.nm_usuario
=
obj['nm_usuario'];
this.usuario.ds_login
=
obj['ds_login'];
this.usuario.ds_senha
=
obj['ds_senha'];
}else{
Alert.show('Loginincorreto');
Basicamenteoprocessodeloginocorredamesmaformaqueacriaodetabelasaoiniciaro
programavistoanteriormente.UmSQLStatementinstanciadoealimentadocomasmesmas
propriedades, agora voltadas para o login da aplicao com um SELECT, ao invz do
CREATE TABLE utilizado para criao da tabela anteriormente. Foi adicionado tambm um
eventListner,casoocorraosucessonabusca,disparandoafunoonQueryResult().
AfunoonQueryResultresponsavelporverificarseoresultadodabusca,validoouno
para o login e senha informados. Utilizando o mtodo getResult() do SQLStatement,
possivelquevoceobtenhaosresultadosqueaconsultaSQLprocessadaresultou.
O boto com o label Cadastrar no canvas cnvReg possui um evento no click do mouse, e
esse evento responsvel por disparar uma funo chamada btnCadastro_clickHandler,
queserresponsvelpelocadastrodousurionosistema.
?
ViewCodeACTIONSCRIPT3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
publicfunctionbtnCadastro_clickHandler():void
{
varsqlQuery:String
="insertinto
[usuario]"+
"
([nm_usuario],[ds_login],[ds_senha])"+
"values"+
"('"+
this.txtCadNome.text+"',"+
"'"+
this.txtCadUsuario.text+"',"+
"'"+
this.txtCadSenha.text+"')";
this.sqlStm
=new
SQLStatement();
this.sqlStm.sqlConnection
=this.sqlConn;
this.sqlStm.text
=sqlQuery;
this.sqlStm.addEventListener(SQLEvent.RESULT,
onQueryCadastroResult);
this.sqlStm.execute();
}
privatefunctiononQueryCadastroResult(event:SQLEvent):void
{
Alert.show('Cadastroefetuadocomsucesso');
this.vwStack.selectedIndex=0;
caso,
implementamos
sucesso
da
instruo
com
Abaixo, segue na integra todo o fonte da aplicao, com alguns metdos que no foram
comentadosnestetutorial.
ViewCodeACTIONSCRIPT3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<![CDATA[
importmx.events.FlexEvent;
importmx.controls.Alert;
privatevarsqlConn
:SQLConnection;
privatevardbFile
:File;
privatevarsqlStm
:SQLStatement;
privatevardbPath
:String
="SQLiteDemo.sqlite";
privatevarusuario
:Usuario
=newUsuario();
privatefunctioninitApp():void
{
this.dbFile
=
File.documentsDirectory.resolvePath(this.dbPath);
this.sqlConn
=newSQLConnection();
this.sqlConn.addEventListener(SQLEvent.OPEN,
onSQLOpenEvent);
this.sqlConn.addEventListener(SQLErrorEvent.ERROR,
onSQLErroEvent);
this.sqlConn.open(this.dbFile);
}
privatefunctiononSQLOpenEvent(event:SQLEvent):void
{
varsqlQuery:String="CREATETABLEIFNOTEXISTS
[usuario]([cd_usuario]INTEGERPRIMARYKEYAUTOINCREMENT
NOTNULL,[nm_usuario]VARCHAR(100)NULL,[ds_login]
VARCHAR(30)NULL,[ds_senha]VARCHAR(30)NULL);";
this.sqlStm
=new
SQLStatement();
this.sqlStm.sqlConnection
=this.sqlConn;
this.sqlStm.text
=sqlQuery;
this.sqlStm.addEventListener(SQLEvent.RESULT,
onIniciaTabelaResult);
this.sqlStm.execute();
}
privatefunctiononIniciaTabelaResult(event:SQLEvent):void
{
Alert.show('Appdisponivelparaouso');
}
privatefunctiononSQLErroEvent(event:SQLErrorEvent):void
{
Alert.show('Appnodisponivel');
this.vwStack.selectedIndex=1;
}
privatefunctionbtnRegistro_clickHandler():void
{
this.vwStack.selectedIndex=1;
}
privatefunctionbtnEntrar_clickHandler():void
{
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
varsqlQuery:String
="select"+
"*from[usuario]"+
"where"+
"[ds_login]='"+this.txtLogin.text+"'and"+
"[ds_senha]='"+this.txtSenha.text+"'";
this.sqlStm
=new
SQLStatement();
this.sqlStm.sqlConnection
=this.sqlConn;
this.sqlStm.text
=sqlQuery;
this.sqlStm.addEventListener(SQLEvent.RESULT,
onQueryResult);
this.sqlStm.execute();
}
privatefunctiononQueryResult(event:SQLEvent):void
{
varresultado:SQLResult=this.sqlStm.getResult();
if(resultado!=null){
if(resultado.data!=null)
this.vwStack.selectedIndex=2;
varobj:Object
=
resultado.data[0]asObject;
this.usuario.cd_usuario
=
obj['cd_usuario'];
this.usuario.nm_usuario
=
obj['nm_usuario'];
this.usuario.ds_login
=
obj['ds_login'];
this.usuario.ds_senha
=
obj['ds_senha'];
}else{
Alert.show('Loginincorreto');
publicfunctionbtnTelaLogin_clickHandler():void
{
this.vwStack.selectedIndex=0;
}
publicfunctionbtnCadastro_clickHandler():void
{
varsqlQuery:String
="insertinto
[usuario]"+
"([nm_usuario],[ds_login],[ds_senha])"+
"values"+
"('"+this.txtCadNome.text+"',"+
"'"+this.txtCadUsuario.text+"',"+
"'"+this.txtCadSenha.text+"')";
this.sqlStm
=new
SQLStatement();
this.sqlStm.sqlConnection
=this.sqlConn;
this.sqlStm.text
=sqlQuery;
this.sqlStm.addEventListener(SQLEvent.RESULT,
onQueryCadastroResult);
this.sqlStm.execute();
}
privatefunctiononQueryCadastroResult(event:SQLEvent):void
{
Alert.show('Cadastroefetuadocomsucesso');
this.vwStack.selectedIndex=0;
]]>
AIR