Eu já saquei um SQLiteManager para ver as bases de dados.
Digo isto porque ele não me dá nenhum erro na criação da bd, nem na criação
da tabela, nem no insert dos dados, mas quando faço o select devolve-me
null. Queria conseguir chegar à tabela para ter a certeza que eles estão a
ser criados, mas quando faço
trace(db.url); dá-me app:/booksapp.db
trace(db.exists); dá-me false


2013/1/22 Hugo Ferreira <[email protected]>

> As aplicações são guardadas em conjunto com a base de dados numa área
> isolada (sandbox) no entanto podes fazer uma cópia da base de dados em
> runtime para a área "documents" que no caso do Android representa a raíz do
> cartão SD.
> No caso do iOS representa uma área reservada de documentos dentro da
> própria sandbox e terás de preparar o xml para esse efeito (depois via
> iTunes consegues chegar ao ficheiro).
>
>
> 2013/1/22 Luis Costa <[email protected]>
>
>> Na generalidade, onde é que as aplicações são guardadas. É que não
>> consigo encontrar a que criei em nenhuma pasta para ver a base de dados que
>> é suposto estar criada e que fazendo um trace diz que não existe
>>
>>
>> On Tue, Jan 22, 2013 at 3:48 PM, Hugo Ferreira <[email protected]>wrote:
>>
>>> Sim, é preciso permissão de leitura/escrita no SD (podes configurar isto
>>> via FB ou via xml).
>>>
>>>
>>> 2013/1/22 Luis Costa <[email protected]>
>>>
>>>> Boas, continuando neste tópico.
>>>> Já tenho a app criada, mas não me está a escrever na BD. É necessário
>>>> algum tipo de permissões no tablet para tal ?
>>>>
>>>> O meu código de mysql:
>>>>
>>>>
>>>> private var sqlc:SQLConnection = new SQLConnection();
>>>> // sqlc is an SQLStatment which we need to execute our sql commands
>>>> private var sqls:SQLStatement = new SQLStatement();
>>>> // ArrayCollection used as a data provider for the datagrid. It has to
>>>> be bindable so that data in datagrid changes automatically when we change
>>>> the ArrayCollection
>>>> [Bindable]
>>>> private var dp:ArrayCollection = new ArrayCollection();
>>>>
>>>> // function we call at the begining when application has finished
>>>> loading and bulding itself
>>>> private function start():void
>>>> {
>>>>     // first we need to set the file class for our database (in this
>>>> example test.db). If the Database doesn't exists it will be created when we
>>>> open it.
>>>>     var db:File =
>>>> File.applicationStorageDirectory.resolvePath("booksapp.db");
>>>>     // after we set the file for our database we need to open it with
>>>> our SQLConnection.
>>>>     sqlc.openAsync(db);
>>>>     // we need to set some event listeners so we know if we get an sql
>>>> error, when the database is fully opened and to know when we recive a
>>>> resault from an sql statment. The last one is uset to read data out of
>>>> database.
>>>>     sqlc.addEventListener(SQLEvent.OPEN, db_opened);
>>>>     sqlc.addEventListener(SQLErrorEvent.ERROR, error);
>>>>     sqls.addEventListener(SQLErrorEvent.ERROR, error);
>>>>     sqls.addEventListener(SQLEvent.RESULT, resault);
>>>>
>>>> }
>>>>
>>>> private function db_opened(e:SQLEvent):void
>>>> {
>>>>     // when the database is opened we need to link the SQLStatment to
>>>> our SQLConnection, so that sql statments for the right database.
>>>>     // if you don't set this connection you will get an error when you
>>>> execute sql statment.
>>>>     sqls.sqlConnection = sqlc;
>>>>     // in property text of our SQLStatment we write our sql command. We
>>>> can also combine sql statments in our text property so that more than one
>>>> statment can be executed at a time.
>>>>     // in this sql statment we create table in our database with name
>>>> "test_table" with three columns (id, first_name and last_name). Id is an
>>>> integer that is auto incremented when each item is added. First_name and
>>>> last_name are columns in which we can store text
>>>>     // If you want to know more about sql statments search the web.
>>>>     sqls.text = "CREATE TABLE IF NOT EXISTS books_table ( id INTEGER
>>>> PRIMARY KEY AUTOINCREMENT, title TEXT,author TEXT,year TEXT, spot TEXT,
>>>> borrowed TEXT, readed TEXT, avaliation TEXT)";
>>>>     // after we have connected sql statment to our sql connection and
>>>> writen our sql commands we also need to execute our sql statment.
>>>>     // nothing will change in database until we execute sql statment.
>>>>     sqls.execute();
>>>>     //Test on Insert
>>>>     sqls.text = "INSERT INTO books_table
>>>> VALUES('11','22','33','44','55','66','77')";
>>>>     sqls.execute();
>>>>     // after we load the database and create the table if it doesn't
>>>> already exists, we call refresh method which i have created to populate our
>>>> datagrid
>>>>     refresh();
>>>> }
>>>> // function to add item to our database
>>>> private function addItem(title:String ,author:String ,year:String ,
>>>> spot:String, borrowed:String, readed:String , avaliation:String):void
>>>> {
>>>>     // in this sql statment we add item at the end of our table with
>>>> values first_name.text in column first_name and last_name.text for column
>>>> last_name
>>>>     sqls.text = "INSERT INTO books_table
>>>> VALUES('"+title+"','"+author+"','"+year+"','"+spot+"','"+borrowed+"','"+readed+"','"+avaliation+"')";
>>>>     sqls.execute();
>>>>
>>>>     refresh();
>>>> }
>>>>
>>>> // function to call when we want to refresh the data in datagrid
>>>> private function refresh(e:TimerEvent = null):void
>>>> {
>>>>     // timer object which we need if sql statment is still executing so
>>>> that we can try again after 10 milliseconds.
>>>>     var timer:Timer = new Timer(10,1);
>>>>     timer.addEventListener(TimerEvent.TIMER, refresh);
>>>>
>>>>     if ( !sqls.executing )// we need to check if our sql statment is
>>>> still executing our last sql command. If so we use Timer to try again in 10
>>>> milliseconds. If we wouldn't check we could get an error because
>>>> SQLStatment can't execute two statments at the same time.
>>>>     {
>>>>         // sql statment which returns all the data from our
>>>> "test_table". To retrive only data from first_name and last_name columns we
>>>> would use "SELECT first_name,last_name FROM test_table"
>>>>         sqls.text = "SELECT * FROM books_table"
>>>>         sqls.execute();
>>>>     }
>>>>     else
>>>>     {
>>>>         timer.start();
>>>>     }
>>>> }
>>>>
>>>> // method that gets called if we recive some resaults from our sql
>>>> commands.
>>>> //this method would also get called for sql statments to insert item
>>>> and to create table but in this case sqls.getResault().data would be null
>>>> private function resault(e:SQLEvent):void
>>>> {
>>>>     // with sqls.getResault().data we get the array of objects for each
>>>> row out of our database
>>>>     var data:Array = sqls.getResult().data;
>>>>     // we pass the array of objects to our data provider to fill the
>>>> datagrid
>>>>     dp = new ArrayCollection(data);
>>>> }
>>>>
>>>> // method to remove row from database.
>>>> private function remove(selIndex:Number):void
>>>> {
>>>>     // sql statment to delete from our test_table the row that has the
>>>> same number in number column as our selected row from datagrid
>>>>     sqls.text = "DELETE FROM books_table WHERE id="+dp[selIndex].id;
>>>>     sqls.execute();
>>>>     refresh();
>>>> }
>>>> // method which gets called when we recive an error  from sql
>>>> connection or sql statment and displays the error in the alert
>>>> private function error(e:SQLErrorEvent):void
>>>> {
>>>>
>>>> }// ActionScript file
>>>>
>>>>
>>>> 2013/1/21 Luis Costa <[email protected]>
>>>>
>>>>> São os meus primeiros passos em programar para Android, todos as dicas
>>>>> são bem vindas :-)
>>>>>
>>>>>
>>>>> 2013/1/21 Hugo Ferreira <[email protected]>
>>>>>
>>>>>> OK.
>>>>>> Outra coisa importante a ter em atenção: Cache de dados.
>>>>>> Pequenas tabelas de dados que não sejam alvo de alterações frequentes
>>>>>> e que são de consulta frequente, deverão ficar em memória, poupando o
>>>>>> acesso ao cartão SD, no entanto isto tem de ser feito com peso e medida
>>>>>> pois como bem sabemos, a memória é um recurso escasso :)
>>>>>>
>>>>>> Programar "qualquer um" faz mas desenvolver uma aplicação com pinta
>>>>>> :) (funcionalidades completas e úteis e ao mesmo tempo rápida pode-se
>>>>>> tornar um grande desafio e a cereja no topo de bolo é faze-lo com um 
>>>>>> código
>>>>>> de fácil legibilidade e manutenção).
>>>>>>
>>>>>>
>>>>>>
>>>>>> No dia 21 de Janeiro de 2013 à36 18:48, Luis Costa <
>>>>>> [email protected]> escreveu:
>>>>>>
>>>>>> É apenas uma biblioteca, mas quando esta app ficar boa depois passo
>>>>>>> para outras secalhar mais pesadas.
>>>>>>> Vou optar por ver como gravar os dados no SQLite.
>>>>>>>
>>>>>>>
>>>>>>> 2013/1/21 Hugo Ferreira <[email protected]>
>>>>>>>
>>>>>>>> Boa tarde Luís.
>>>>>>>>
>>>>>>>> Se queres guardar um grande volume de dados no cartão SD, recomendo
>>>>>>>> o uso do SQLite mas atenção que o acesso ao cartão é lento pelo que 
>>>>>>>> aqui
>>>>>>>> toda e qualquer técnica de tunning deverá ser aplicada.
>>>>>>>>
>>>>>>>> Posso te dizer que numa das minhas primeiras aplicações nos
>>>>>>>> marketplaces chegou a demorar mais de 5 segundos ao carregar dados
>>>>>>>> auxiliares no arranque, após a bd ter ganho um grande volume de dados. 
>>>>>>>> Após
>>>>>>>> estudar e aplicar todas as técnicas de tunning de sqlite, passou a 
>>>>>>>> demorar
>>>>>>>> microsegundos.
>>>>>>>>
>>>>>>>> O Google aqui é teu amigo para descobrires como usar o SQLite e
>>>>>>>> como aplicar estas técnicas logo de ínicio.
>>>>>>>>
>>>>>>>> Se quiseres apenas guardar variáveis (por exemplo para o estado de
>>>>>>>> um jogo), então podes usar um processo menos pesado como o shared 
>>>>>>>> object.
>>>>>>>>
>>>>>>>>
>>>>>>>> Cumprimentos,
>>>>>>>> Hugo.
>>>>>>>>
>>>>>>>>
>>>>>>>> No dia 21 de Janeiro de 2013 à44 18:33, Luis Costa <
>>>>>>>> [email protected]> escreveu:
>>>>>>>>
>>>>>>>>> Boas pessoal,
>>>>>>>>> Estou a fazer a minha primeira experiência de aplicação para
>>>>>>>>> Android com Adobe Flash Builder,
>>>>>>>>> Qual a melhor maneira de guardar os dados no Android ? Mysql ?
>>>>>>>>> Alguém sabe de um bom tutorial para estar parte ?
>>>>>>>>> Cumprimentos
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> Luís Medeiro Costa
>>>>>>>>>
>>>>>>>>> Flex Front-End Developer
>>>>>>>>> URL: http://www.luiscostaweb.com/
>>>>>>>>> E-mail: [email protected]
>>>>>>>>> MSN: [email protected]
>>>>>>>>> Twitter: http://twitter.com/LTostas
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> Recebeu esta mensagem porque está inscrito no grupo "Mailing List
>>>>>>>>> da Comunidade Portuguesa de Rich Internet Applications -
>>>>>>>>> www.riapt.org" dos Grupos do Google.
>>>>>>>>> Para publicar uma mensagem neste grupo, envie um e-mail para
>>>>>>>>> [email protected].
>>>>>>>>> Para anular a inscrição neste grupo, envie um e-mail para
>>>>>>>>> [email protected].
>>>>>>>>> Para ver mais opções, visite este grupo em
>>>>>>>>> http://groups.google.com/group/riapt?hl=pt-PT.
>>>>>>>>>
>>>>>>>>
>>>>>>>>  --
>>>>>>>> Recebeu esta mensagem porque está inscrito no grupo "Mailing List
>>>>>>>> da Comunidade Portuguesa de Rich Internet Applications -
>>>>>>>> www.riapt.org" dos Grupos do Google.
>>>>>>>> Para publicar uma mensagem neste grupo, envie um e-mail para
>>>>>>>> [email protected].
>>>>>>>> Para anular a inscrição neste grupo, envie um e-mail para
>>>>>>>> [email protected].
>>>>>>>> Para ver mais opções, visite este grupo em
>>>>>>>> http://groups.google.com/group/riapt?hl=pt-PT.
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Luís Medeiro Costa
>>>>>>>
>>>>>>> Flex Front-End Developer
>>>>>>> URL: http://www.luiscostaweb.com/
>>>>>>> E-mail: [email protected]
>>>>>>> MSN: [email protected]
>>>>>>> Twitter: http://twitter.com/LTostas
>>>>>>>
>>>>>>> --
>>>>>>> Recebeu esta mensagem porque está inscrito no grupo "Mailing List da
>>>>>>> Comunidade Portuguesa de Rich Internet Applications - www.riapt.org"
>>>>>>> dos Grupos do Google.
>>>>>>> Para publicar uma mensagem neste grupo, envie um e-mail para
>>>>>>> [email protected].
>>>>>>> Para anular a inscrição neste grupo, envie um e-mail para
>>>>>>> [email protected].
>>>>>>> Para ver mais opções, visite este grupo em
>>>>>>> http://groups.google.com/group/riapt?hl=pt-PT.
>>>>>>>
>>>>>>
>>>>>>  --
>>>>>> Recebeu esta mensagem porque está inscrito no grupo "Mailing List da
>>>>>> Comunidade Portuguesa de Rich Internet Applications - www.riapt.org"
>>>>>> dos Grupos do Google.
>>>>>> Para publicar uma mensagem neste grupo, envie um e-mail para
>>>>>> [email protected].
>>>>>> Para anular a inscrição neste grupo, envie um e-mail para
>>>>>> [email protected].
>>>>>> Para ver mais opções, visite este grupo em
>>>>>> http://groups.google.com/group/riapt?hl=pt-PT.
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Luís Medeiro Costa
>>>>>
>>>>> Flex Front-End Developer
>>>>> URL: http://www.luiscostaweb.com/
>>>>> E-mail: [email protected]
>>>>> MSN: [email protected]
>>>>> Twitter: http://twitter.com/LTostas
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Luís Medeiro Costa
>>>>
>>>> Flex Front-End Developer
>>>> URL: http://www.luiscostaweb.com/
>>>> E-mail: [email protected]
>>>> MSN: [email protected]
>>>> Twitter: http://twitter.com/LTostas
>>>>
>>>> --
>>>> Recebeu esta mensagem porque está inscrito no grupo "Mailing List da
>>>> Comunidade Portuguesa de Rich Internet Applications - www.riapt.org"
>>>> dos Grupos do Google.
>>>> Para publicar uma mensagem neste grupo, envie um e-mail para
>>>> [email protected].
>>>> Para anular a inscrição neste grupo, envie um e-mail para
>>>> [email protected].
>>>> Para ver mais opções, visite este grupo em
>>>> http://groups.google.com/group/riapt?hl=pt-PT.
>>>>
>>>
>>>  --
>>> Recebeu esta mensagem porque está inscrito no grupo "Mailing List da
>>> Comunidade Portuguesa de Rich Internet Applications - www.riapt.org"
>>> dos Grupos do Google.
>>> Para publicar uma mensagem neste grupo, envie um e-mail para
>>> [email protected].
>>> Para anular a inscrição neste grupo, envie um e-mail para
>>> [email protected].
>>> Para ver mais opções, visite este grupo em
>>> http://groups.google.com/group/riapt?hl=pt-PT.
>>>
>>
>>
>>
>> --
>> Luís Medeiro Costa
>>
>> Flex Front-End Developer
>> URL: http://www.luiscostaweb.com/
>> E-mail: [email protected]
>> MSN: [email protected]
>> Twitter: http://twitter.com/LTostas
>>
>> --
>> Recebeu esta mensagem porque está inscrito no grupo "Mailing List da
>> Comunidade Portuguesa de Rich Internet Applications - www.riapt.org" dos
>> Grupos do Google.
>> Para publicar uma mensagem neste grupo, envie um e-mail para
>> [email protected].
>> Para anular a inscrição neste grupo, envie um e-mail para
>> [email protected].
>> Para ver mais opções, visite este grupo em
>> http://groups.google.com/group/riapt?hl=pt-PT.
>>
>
>  --
> Recebeu esta mensagem porque está inscrito no grupo "Mailing List da
> Comunidade Portuguesa de Rich Internet Applications - www.riapt.org" dos
> Grupos do Google.
> Para publicar uma mensagem neste grupo, envie um e-mail para
> [email protected].
> Para anular a inscrição neste grupo, envie um e-mail para
> [email protected].
> Para ver mais opções, visite este grupo em
> http://groups.google.com/group/riapt?hl=pt-PT.
>



-- 
Luís Medeiro Costa

Flex Front-End Developer
URL: http://www.luiscostaweb.com/
E-mail: [email protected]
MSN: [email protected]
Twitter: http://twitter.com/LTostas

-- 
Recebeu esta mensagem porque está inscrito no grupo "Mailing List da Comunidade 
Portuguesa de Rich Internet Applications - www.riapt.org" dos Grupos do Google.

Para publicar uma mensagem neste grupo, envie um e-mail para 
[email protected].
Para anular a inscrição neste grupo, envie um e-mail para 
[email protected].
Para ver mais opções, visite este grupo em 
http://groups.google.com/group/riapt?hl=pt-PT.

Responder a