Escolar Documentos
Profissional Documentos
Cultura Documentos
Vincius Loureno
Idias, conhecimento, opinio, empreendedorismo, tecnologia, PHP, AS3, Adobe Flex.
RSS Feed Home Quem o Vincius? Vincius Loureno HTML5 SQLite offline em dispositivos mveis com HTML5 jun 28
O HTML5 de fato contm adicionais altamente interessantes para o desenvolvimento, e a criao e interao com banco de dados offline certamente uma delas. E tudo isto sem nenhuma linguagem back-end, apenas sendo realizado via Javascript, responsvel por criar a tabela e realizar as querys de CRUD (Create Retrieve Update Delete), bem como ter suas funes de tratamento de erros e atualizaes de status. Sendo assim uma boa soluo para quando suas WebApps necessitam, por algum motivo, de ter um banco de dados local e de acesso offline. Esta funcionalidade permitida em navegadores que suportam HTML5 e SQLite, cujo script JS detecta e exibe esta possibilidade logo ao iniciar sua execuo. Este mesmo exemplo foi testado nos navegadores: Google Chrome; Safari Mobile (iPad/iPhone/iPod Touch) Lembrando que para estes por default o limite de 5MB de cache. Abaixo a visualizao do banco criado utilizando o Google Chrome:
Tudo que precisamos so apenas 3 estruturas: HTML (index.html); Javascript (offlinedatabase.manifest ); Manifest (offlinedatabaseJS.js). Respectivamente e objetivamente: HTML a inteface para o usurio, Javascript com toda criao do banco bem como suas funes de CRUD, tratamento e atualizaes de status e o arquivo manifest responsvel por salvar o arquivo com as funes para uso offline. Como uma imagem vale mais do que mil palavras, abaixo a representao desta estrutura:
blog.vilourenco.com.br/como-criar-sqlite-offline-em-dispositivos-moveis-com-html5/
1/6
23/01/13
< / h e a d > < b o d yo n l o a d = " o n I n i t ( ) " > < h 3 > D a d o s : < / h 3 > < u l i d = " i t e m D a t a "s t y l e = " c u r s o r : p o i n t e r ; " > < / u l > < h 3 > D e t a l h e s : < / h 3 > < f o r mn a m e = " i t e m F o r m " > < l a b e lf o r = " i d " > I d : < / l a b e l > < i n p u tt y p e = " t e x t "n a m e = " i d "i d = " i d "s i z e = 2d i s a b l e d = " t r u e " / > < l a b e lf o r = " n o m e " > N o m e : < / l a b e l > < i n p u tt y p e = " t e x t "n a m e = " n o m e "i d = " n o m e "s i z e = 1 0 / > < l a b e lf o r = " i d a d e " > I d a d e < / l a b e l > < i n p u tt y p e = " t e x t "n a m e = " i d a d e "i d = " i d a d e "s i z e = 3/ >< b r > < b r > < i n p u tt y p e = " b u t t o n "n a m e = " c r e a t e "v a l u e = " C r e a t e "o n c l i c k = " o n C r e a t e ( ) "/ > < i n p u tt y p e = " b u t t o n "n a m e = " u p d a t e "v a l u e = " U p d a t e "o n c l i c k = " o n U p d a t e ( ) "/ > < i n p u tt y p e = " b u t t o n "n a m e = " d e l e t e "v a l u e = " D e l e t e "o n c l i c k = " o n D e l e t e ( ) "/ > < / f o r m > < h 4 > S t a t u s : < / h 4 > < d i vi d = " s t a t u s " > < / d i v > < / b o d y > < / h t m l >
Abaixo a parte Javascript, onde temos as funes CRUD para criao da tabela (funo ao iniciar a aplicao), manipulao dos dados, tratamento de erros e atualizaes de status.:
/ / 1 .I n i c i a l i z a o v a rl o c a l D B=n u l l ; f u n c t i o no n I n i t ( ) { t r y{ i f( ! w i n d o w . o p e n D a t a b a s e ){ u p d a t e S t a t u s ( " E r r o :S e un a v e g a d o rn op e r m i t eb a n c od ed a d o s . " ) ; } e l s e{ i n i t D B ( ) ; c r e a t e T a b l e s ( ) ; q u e r y A n d U p d a t e O v e r v i e w ( ) ; } } c a t c h( e ){ i f( e= =2 ){ u p d a t e S t a t u s ( " E r r o :V e r s od eb a n c od ed a d o si n v l i d a . " ) ; } e l s e{ u p d a t e S t a t u s ( " E r r o :E r r od e s c o n h e c i d o :"+e+" . " ) ; } r e t u r n ; } } f u n c t i o ni n i t D B ( ) { v a rs h o r t N a m e=' s t u f f D B ' ; v a rv e r s i o n=' 1 . 0 ' ; v a rd i s p l a y N a m e=' M y S t u f f D B ' ; v a rm a x S i z e=6 5 5 3 6 ;/ /E mb y t e s l o c a l D B=w i n d o w . o p e n D a t a b a s e ( s h o r t N a m e ,v e r s i o n ,d i s p l a y N a m e ,m a x S i z e ) ;
blog.vilourenco.com.br/como-criar-sqlite-offline-em-dispositivos-moveis-com-html5/
2/6
23/01/13
}
f u n c t i o nc r e a t e T a b l e s ( ) { v a rq u e r y=' C R E A T ET A B L EI FN O TE X I S T Sv i l o u r e n c o ( i dI N T E G E RN O TN U L LP R I M A R YK E YA U T O I N C R E M E N T ,n o m eV A R C H A RN O TN U L L ,i d a d eV A R C H A RN O t r y{ l o c a l D B . t r a n s a c t i o n ( f u n c t i o n ( t r a n s a c t i o n ) { t r a n s a c t i o n . e x e c u t e S q l ( q u e r y ,[ ] ,n u l l D a t a H a n d l e r ,e r r o r H a n d l e r ) ; u p d a t e S t a t u s ( " T a b e l a' v i l o u r e n c o 's t a t u s :O K . " ) ; } ) ; } c a t c h( e ){ u p d a t e S t a t u s ( " E r r o :D a t ab a s e' v i l o u r e n c o 'n oc r i a d a"+e+" . " ) ; r e t u r n ; } }
/ / 2 .Q u e r yev i s u a l i z a od eU p d a t e
f u n c t i o no n U p d a t e ( ) { v a ri d=d o c u m e n t . i t e m F o r m . i d . v a l u e ; v a rn o m e=d o c u m e n t . i t e m F o r m . n o m e . v a l u e ; v a ri d a d e=d o c u m e n t . i t e m F o r m . i d a d e . v a l u e ; i f( n o m e= =" "| |i d a d e= =" " ){ u p d a t e S t a t u s ( " ' N o m e 'e' I d a d e 's oc a m p o so b r i g a t r i o s ! " ) ; } e l s e{ v a rq u e r y=" u p d a t ev i l o u r e n c os e tn o m e = ? ,i d a d e = ?w h e r ei d = ? ; " ; t r y{ l o c a l D B . t r a n s a c t i o n ( f u n c t i o n ( t r a n s a c t i o n ) { t r a n s a c t i o n . e x e c u t e S q l ( q u e r y ,[ n o m e ,i d a d e ,i d ] ,f u n c t i o n ( t r a n s a c t i o n ,r e s u l t s ) { i f( ! r e s u l t s . r o w s A f f e c t e d ){ u p d a t e S t a t u s ( " E r r o :U p d a t en or e a l i z a d o . " ) ; } e l s e{ u p d a t e F o r m ( " " ," " ," " ) ; u p d a t e S t a t u s ( " U p d a t er e a l i z a d o : "+r e s u l t s . r o w s A f f e c t e d ) ; q u e r y A n d U p d a t e O v e r v i e w ( ) ; } } ,e r r o r H a n d l e r ) ; } ) ; } c a t c h( e ){ u p d a t e S t a t u s ( " E r r o :U P D A T En or e a l i z a d o"+e+" . " ) ; } } } f u n c t i o no n D e l e t e ( ) { v a ri d=d o c u m e n t . i t e m F o r m . i d . v a l u e ; v a rq u e r y=" d e l e t ef r o mv i l o u r e n c ow h e r ei d = ? ; " ; t r y{ l o c a l D B . t r a n s a c t i o n ( f u n c t i o n ( t r a n s a c t i o n ) { t r a n s a c t i o n . e x e c u t e S q l ( q u e r y ,[ i d ] ,f u n c t i o n ( t r a n s a c t i o n ,r e s u l t s ) { i f( ! r e s u l t s . r o w s A f f e c t e d ){ u p d a t e S t a t u s ( " E r r o :D e l e t en or e a l i z a d o . " ) ; } e l s e{ u p d a t e F o r m ( " " ," " ," " ) ; u p d a t e S t a t u s ( " L i n h a sd e l e t a d a s : "+r e s u l t s . r o w s A f f e c t e d ) ; q u e r y A n d U p d a t e O v e r v i e w ( ) ; } } ,e r r o r H a n d l e r ) ; } ) ; } c a t c h( e ){ u p d a t e S t a t u s ( " E r r o :D E L E T En or e a l i z a d o"+e+" . " ) ; } } f u n c t i o no n C r e a t e ( ) { v a rn o m e=d o c u m e n t . i t e m F o r m . n o m e . v a l u e ; v a ri d a d e=d o c u m e n t . i t e m F o r m . i d a d e . v a l u e ; i f( n o m e= =" "| |i d a d e= =" " ){ u p d a t e S t a t u s ( " E r r o :' N o m e 'e' I d a d e 's oc a m p o so b r i g a t r i o s ! " ) ; } e l s e{ v a rq u e r y=" i n s e r ti n t ov i l o u r e n c o( n o m e ,i d a d e )V A L U E S( ? ,? ) ; " ; t r y{ l o c a l D B . t r a n s a c t i o n ( f u n c t i o n ( t r a n s a c t i o n ) { t r a n s a c t i o n . e x e c u t e S q l ( q u e r y ,[ n o m e ,i d a d e ] ,f u n c t i o n ( t r a n s a c t i o n ,r e s u l t s ) { i f( ! r e s u l t s . r o w s A f f e c t e d ){ u p d a t e S t a t u s ( " E r r o :I n s e r on or e a l i z a d a " ) ; } e l s e{ u p d a t e F o r m ( " " ," " ," " ) ; u p d a t e S t a t u s ( " I n s e r or e a l i z a d a ,l i n h ai d :"+r e s u l t s . i n s e r t I d ) ; q u e r y A n d U p d a t e O v e r v i e w ( ) ; } } ,e r r o r H a n d l e r ) ; } ) ;
blog.vilourenco.com.br/como-criar-sqlite-offline-em-dispositivos-moveis-com-html5/
3/6
23/01/13
} } f u n c t i o no n S e l e c t ( h t m l L I E l e m e n t ) { v a ri d=h t m l L I E l e m e n t . g e t A t t r i b u t e ( " i d " ) ; q u e r y=" S E L E C T*F R O Mv i l o u r e n c ow h e r ei d = ? ; " ; t r y{ l o c a l D B . t r a n s a c t i o n ( f u n c t i o n ( t r a n s a c t i o n ) { t r a n s a c t i o n . e x e c u t e S q l ( q u e r y ,[ i d ] ,f u n c t i o n ( t r a n s a c t i o n ,r e s u l t s ) { v a rr o w=r e s u l t s . r o w s . i t e m ( 0 ) ; u p d a t e F o r m ( r o w [ ' i d ' ] ,r o w [ ' n o m e ' ] ,r o w [ ' i d a d e ' ] ) ; } ,f u n c t i o n ( t r a n s a c t i o n ,e r r o r ) { u p d a t e S t a t u s ( " E r r o :"+e r r o r . c o d e+" < b r > M e n s a g e m :"+e r r o r . m e s s a g e ) ; } ) ; } ) ; } c a t c h( e ){ u p d a t e S t a t u s ( " E r r o r :S E L E C Tn or e a l i z a d o"+e+" . " ) ; } } f u n c t i o nq u e r y A n d U p d a t e O v e r v i e w ( ) { / / R e m o v ea sl i n h a se x i s t e n t e sp a r ai n s e r od a sn o v a s v a rd a t a R o w s=d o c u m e n t . g e t E l e m e n t B y I d ( " i t e m D a t a " ) . g e t E l e m e n t s B y C l a s s N a m e ( " d a t a " ) ; w h i l e( d a t a R o w s . l e n g t h>0 ){ r o w=d a t a R o w s [ 0 ] ; d o c u m e n t . g e t E l e m e n t B y I d ( " i t e m D a t a " ) . r e m o v e C h i l d ( r o w ) ; } ; / / R e a l i z aal e i t u r an ob a n c oec r i an o v a sl i n h a sn at a b e l a . v a rq u e r y=" S E L E C T*F R O Mv i l o u r e n c o ; " ; t r y{ l o c a l D B . t r a n s a c t i o n ( f u n c t i o n ( t r a n s a c t i o n ) { t r a n s a c t i o n . e x e c u t e S q l ( q u e r y ,[ ] ,f u n c t i o n ( t r a n s a c t i o n ,r e s u l t s ) { f o r( v a ri=0 ;i<r e s u l t s . r o w s . l e n g t h ;i + + ){ v a rr o w=r e s u l t s . r o w s . i t e m ( i ) ; v a rl i=d o c u m e n t . c r e a t e E l e m e n t ( " l i " ) ; l i . s e t A t t r i b u t e ( " i d " ,r o w [ ' i d ' ] ) ; l i . s e t A t t r i b u t e ( " c l a s s " ," d a t a " ) ; l i . s e t A t t r i b u t e ( " o n c l i c k " ," o n S e l e c t ( t h i s ) " ) ; v a rl i T e x t=d o c u m e n t . c r e a t e T e x t N o d e ( r o w [ ' n o m e ' ]+"x" +r o w [ ' i d a d e ' ] ) ; l i . a p p e n d C h i l d ( l i T e x t ) ; d o c u m e n t . g e t E l e m e n t B y I d ( " i t e m D a t a " ) . a p p e n d C h i l d ( l i ) ; } } ,f u n c t i o n ( t r a n s a c t i o n ,e r r o r ) { u p d a t e S t a t u s ( " E r r o :"+e r r o r . c o d e+" < b r > M e n s a g e m :"+e r r o r . m e s s a g e ) ; } ) ; } ) ; } c a t c h( e ){ u p d a t e S t a t u s ( " E r r o r :S E L E C Tn or e a l i z a d o"+e+" . " ) ; } } / /3 .F u n e sd et r a t a m e n t oes t a t u s . / /T r a t a n d oe r r o s e r r o r H a n d l e r=f u n c t i o n ( t r a n s a c t i o n ,e r r o r ) { u p d a t e S t a t u s ( " E r r o :"+e r r o r . m e s s a g e ) ; r e t u r nt r u e ; } n u l l D a t a H a n d l e r=f u n c t i o n ( t r a n s a c t i o n ,r e s u l t s ) { } / /F u n e sd eu p d a t e f u n c t i o nu p d a t e F o r m ( i d ,n o m e ,i d a d e ) { d o c u m e n t . i t e m F o r m . i d . v a l u e=i d ; d o c u m e n t . i t e m F o r m . n o m e . v a l u e=n o m e ; d o c u m e n t . i t e m F o r m . i d a d e . v a l u e=i d a d e ; } f u n c t i o nu p d a t e S t a t u s ( s t a t u s ) { d o c u m e n t . g e t E l e m e n t B y I d ( ' s t a t u s ' ) . i n n e r H T M L=s t a t u s ; }
O arquivo .manifest possui apenas o nome do arquivo de Javascript para que seja armazenado no cache com fins de ser acessado offline. DEMO DOWNLOAD
blog.vilourenco.com.br/como-criar-sqlite-offline-em-dispositivos-moveis-com-html5/ 4/6
23/01/13
Espero que tenham gostado do post, em casos de dvidas bastam comentar ou entrar em contato via email. Forte abrao e excelente resto de semana.
554
4
Like
Comentrio Voc pode usar estas tags e atributos de HTML: < ah r e f = " "t i t l e = " " >< a b b rt i t l e = " " >< a c r o n y mt i t l e = " " >< b >< b l o c k q u o t ec i t e = " " >< c i t e >< c o d e >
< d e ld a t e t i m e = " " >< e m >< i >< qc i t e = " " >< s t r i k e >< s t r o n g >< p r el a n g = " "l i n e = " "e s c a p e d = " "h i g h l i g h t = " " > Publicar comentrio
Pesquisar
Posts Recentes Congresso Mundial de Inovao! PHP Classe para Upload Neuromarketing e as Redes Sociais. Vdeo: Como algoritmos moldam nosso mundo! SQLite offline em dispositivos mveis com HTML5 Inovando a roda. Entrevista Revista Wide. Empreender + Inovar + Gostar. Tags:
#SouDev ActionScript3 Adobe Air Carreira Coldfusion Downloads Empreender entrevista eventos Flash
Javascript Jobs melhores prticas MySQL neurobusiness neuromarketing Oportunidades Orientao a Objetos Palestra PHP programao API Utilidades Webdesign
blog.vilourenco.com.br/como-criar-sqlite-offline-em-dispositivos-moveis-com-html5/
Pronuncia Quicktips
SQLite T witter
5/6
23/01/13
Lista de Links BeckLog Daniel Schmitz Eduardo Armstrong Correnti Erko Bridee Igor Costa Janderson F. Cardoso Luiz Henrique Z. Santana Marcos Jnior Mario Junior Mrio Santos Rafael Cavalcante Srgio Rodrigues Vedovelli The Right Way!
Categorias: #SouDev Adobe Air Empreendedorismo Entrevista Eventos Flash Builder Flex HTML5 Linguagens Oportunidades PHP SQLite String Utilidades Publicidade
Vincius Loureno All Rights Reserved. Designed & Developed by Carla Izumi Bamford Powered by Wordpress Go back to top
blog.vilourenco.com.br/como-criar-sqlite-offline-em-dispositivos-moveis-com-html5/
6/6