Вы находитесь на странице: 1из 9

AIRPequenoexemplocomSQLite

25, M A RCH 2009 / S TE FA N HOROCHOV E C / 15 COM M E NTS

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.

Criado o projeto, o FlexBuilder ir abrilo como default, e ir disponibilzar os arquivos


SQLiteDemo.mxml e SQLiteDemoapp.xml. Na imagem abaixo, ir aparecer um arquivo
chamadoUsuario.as,quesercriadomaistardenodecorrerdotutorial.

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;

Novamente, seguindo o padro j apresentado nas outras duas situaces, a funo


basicamente responsavel por informar a uma nova instncia do SQLStatement, a nova
instruoSQLaserexecutadanobancodedados,eatravsdeumeventListner,vocpoder
personalizarosucessoouafalhadaexecuodaSQL.
Nesse

caso,

implementamos

sucesso

da

instruo

com

mtodoonQueryCadastroResult(), aonde ele responsvel por informar o usurio do


sucessodocadastroeoenvianovamenteaocanvasdelogin.
Basicamente,dessaforma,vocpoderterumaaplicaorodandoatravsdoAIRcomouso
deumbancodedadosembarcado.Esperotersidoclaronasexplanaessobreoprocesso,
deixandoclaroqueesseumexemplodecomopodemosusaroSQLitecomoAIR,enoum
padroaviraseradotadoparaodesenvolvimentoAIR+SQLite.

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

Вам также может понравиться