SQLite no Android, Entendendo e Utilizando

Investir em Você é Barra de Ouro a R$ 2,00. Cadastre-se e receba grátis conteúdos Android sem precedentes! Você receberá um email de confirmação. Somente depois de confirma-lo é que eu poderei lhe enviar os conteúdos semanais exclusivos. Os artigos em PDF são entregues somente para os inscritos na lista.

Email inválido.
Blog /Android /SQLite no Android, Entendendo e Utilizando

SQLite no Android, Entendendo e Utilizando

Vinícius Thiengo
(48690) (44)
Go-ahead
"O método consciente de tentativa e erro é mais bem-sucedido que o planejamento de um gênio isolado."
Peter Skillman
Prototipagem Android
Capa do curso Prototipagem Profissional de Aplicativos
TítuloAndroid: Prototipagem Profissional de Aplicativos
CategoriasAndroid, Design, Protótipo
AutorVinícius Thiengo
Vídeo aulas186
Tempo15 horas
ExercíciosSim
CertificadoSim
Acessar Curso
Quer aprender a programar para Android? Acesse abaixo o curso gratuito no Blog.
Lendo
TítuloManual de DevOps: como obter agilidade, confiabilidade e segurança em organizações tecnológicas
CategoriaEngenharia de Software
Autor(es)Gene Kim, Jez Humble, John Willis, Patrick Debois
EditoraAlta Books
Edição
Ano2018
Páginas464
Conteúdo Exclusivo
Investir em Você é Barra de Ouro a R$ 2,00. Cadastre-se e receba gratuitamente conteúdos Android sem precedentes!
Email inválido

Tudo bem?

No vídeo acima é apresentado como utilizar a base de dados interna mais popular que o Android nos fornece, o SQLite.

O SQLite é um banco de dados leve e prático, permite a nós desenvolvedores Android um trabalho eficiente de persistência local, algo não conseguido com o SharedPreferences, por exemplo, que é também uma base local, porém bem mais limitada.

Se você está se perguntando:

Por que vou estudar o SQLite se eu já tenho muita experiência com MySQL e outros bancos de dados bem mais populares?

Não se engane, pois por motivos de segurança o sistema Android não nos permite realizar conexões diretas com bancos de dados remotos, bancos compartilhados. Bom, o Android não nos fornece APIs para isso, mas é possível, porém de forma alguma recomendado.

Para essa ação, acesso a dados compartilhados em banco de dados remoto, acontecer como esperado pelo sistema Android, nós temos que utilizar alguma API de comunicação com o servidor Web host da base de dados.

Este servidor, junto a uma linguagem de back-end Web, retornará uma resposta à comunicação realizada, resposta entregue à mesma API utilizada na comunicação Android ➙ back-end Web.

E se você também está pensando:

Ok, Thiengo, vou então estudar alguma API Android de comunicação remota, pois meu projeto trabalha com um banco de dados compartilhado.

Não se engane novamente, pois para melhorar a experiência do usuário, aplicativos que utilizam dados compartilhados de um banco de dados remoto tendem a também oferecer funcionalidades offline.

Funcionalidades possíveis devido ao uso de persistência local, ou seja, o SQLite é também muito útil para apps que trabalham principalmente com dados vindos de bancos de dados remotos.

No SQLite é a SQL ANSII que é utilizada. Não há mistério se você já trabalhou com algum banco de dados SQL.

Somente temos que dar maior atenção ao construtor da classe SQLiteOpenHelper. É preciso saber trabalhar com está entidade, pois em caso de alteração da versão do banco de dados sem o auxílio de um algoritmo de aproveitamento de dados já salvos no SQLite, todos os dados anteriormente persistidos serão perdidos.

No vídeo eu separei as entidades que trabalham com o banco de dados em duas classes:

  • Uma que nos permite acessar as chamadas mais comuns de um banco de dados (INSERT, UPDATE, DELETE, SELECT);
  • E outra que é o core do banco de dados, ou seja, é ela que, ou cria, ou conecta, ou deleta a base de dados.

Note que o layout e as atividades em vídeo já estão prontos, mas se você tiver dificuldades devido a isto, então, posterior ao estudo em vídeo, acesse:

Antes de finalizar, a seguir deixo alguns links de artigos aqui do Blog, com vídeos, que lhe deixarão em dia com o que há de novo no desenvolvimento de aplicativos Android:

E caso você tenha vontade de aprender a criar apps Android, ou apenas evoluir nesta área, também com o conteúdo gratuito do Blog, então não deixe de acessar a lista de estudos em: Estudando Android - Lista de Conteúdos do Blog.

E não esqueça de se inscrever 📫na lista de e-mails do Blog para receber os conteúdos de desenvolvimento Android em primeira mão.

Se inscreva também no canal do Blog no YouTube para acompanhar as últimas novidades.

Surgindo dúvidas ou dicas, pode enviar abaixo na área de comentários que logo eu lhe retorno.

Obs. : o link para download do projeto apresentado em vídeo se encontra logo abaixo no artigo, na seção "Download".

Abraço.

Eclipse IDE vs Android Studio IDE

Apesar de o conteúdo da vídeo aula acima estar utilizando o Eclipse IDE 😱, tudo que é apresentado, tanto a parte teórica quanto a parte prática, é ainda válido nos dias de hoje com o desenvolvimento Android utilizando o Android Studio 😁.

Ou seja, independente da linguagem oficial (Java, Kotlin, C ou C++), IDE ou framework que você esteja utilizando, o conteúdo acima é ainda muito útil.

AndroidX

Apesar do conteúdo sobre SQLite ainda estar atual e ser importante para qualquer nível de desenvolvedor Android.

Apesar disso eu também recomendo, assim que finalizado o projeto em sua própria instalação de IDE, que você o migre para o AndroidX.

Algo que pode ser feito com poucos cliques, como apresentado no tutorial a seguir: Migrar para o AndroidX.

Fontes

Site oficial do SQLite

Save data using SQLite

SQLiteOpenHelper - documentação oficial Android

Investir em Você é Barra de Ouro a R$ 2,00. Cadastre-se e receba grátis conteúdos Android sem precedentes!
Email inválido

Relacionado

Colocando Botão de Update no ActionBar AndroidColocando Botão de Update no ActionBar AndroidAndroid
Customizando ActionBar Android Com ActionBar Style GeneratorCustomizando ActionBar Android Com ActionBar Style GeneratorAndroid
VideoView no Android, Entendendo e UtilizandoVideoView no Android, Entendendo e UtilizandoAndroid
Instalando o Emulador Genymotion no AndroidInstalando o Emulador Genymotion no AndroidAndroid

Compartilhar

Comentários Facebook

Comentários Blog (44)

Para código / script, coloque entre [code] e [/code] para receber marcação especifica.
Forneça seu nome válido.
Forneça seu email válido.
Forneça o comentário.
Enviando, aguarde...
Ruan Alves (1) (0)
12/04/2018
Como funciona a parte de fechar a conexão com o banco de dados? Eu vejo muitos que fecham outros não fecham, qual seria a abordagem mais adequada?
Responder
Vinícius Thiengo (0) (0)
13/04/2018
Ruan, tudo bem?

No caso do SQLite a recomendação é que a conexão somente feche se a partir de XYZ ponto do algoritmo de eu app o SQLite não mais seja necessário.

Isso, pois assim o aplicativo corre menos o risco de sofrer com vazamento de memória e posteriormente lançar ao usuário um OutOfMemoryException.

Não a finalização da conexão é custosa, mas sim a conexão. Temos de ter em mente que os objetos liberados, aqui os recursos para o SQLite, não são imediatamente recolhidos pelo Garbage Collection. A conexão / desconexão seguida varias vezes seguramente induz a um estouro de memória disponível ao aplicativo em execução.

Ruan, a seguir o link de um excelente conteúdo sobre isso (em inglês), incluindo um modelo de codificação utilizando o padrão Singleton:

https://www.androiddesignpatterns.com/2012/05/correctly-managing-your-sqlite-database.html

Este Blog é fenomenal. O Alex Lockwood é um dos mais conhecidos entusiastas Android na língua inglesa.

Mais sobre o padrão Singleton no link a seguir:

https://www.thiengo.com.br/padrao-de-projeto-singleton

De qualquer forma, não esqueça que você tem outras opções de persistência local. Tirando o SQLite, o Realm acaba sendo a mais popular:

https://www.thiengo.com.br/persistencia-de-dados-com-realm-no-android-parte-1

Abraço.
Responder
Ruan Alves (1) (0)
16/04/2018
Opa, show de bola... Hoje nos meus projetos, sempre abro apenas uma conexão e utilizo ela para todos os casos, apenas dou "close" nos cursores. Não sei se é a melhor prática, mais pelo menos até o momento não deu nenhum problema... :)
Responder
Andreia (1) (0)
23/11/2016
Olá Vinicius,tudo bem?!
Mais uma vez, Parabéns pelos post's, acompanho sempre. Bom, estou vendo esse exemplo, pois estou com dificuldade em fazer carregar minha listview ...estou fazendo um cadastro(simples até) e quando salvar tem que aparecer na listagem, mas não mostra nada, e nem dá erro, sabe me dizer o que pode ser, como resolver. Desde já agradeço pela atenção.
Responder
Vinícius Thiengo (0) (0)
25/11/2016
Andreia, tudo bem aqui.

Tente com a lógica de negócio a seguir.

Assim que salvar os dados, terá um feedback (você deve implementar o feedback caso não tenha ainda). True ou false.

Sendo False, informe ao usuário para corrigir a entrada ou corrija você seu script caso a entrado esteja correta.

Sendo true, carregue novamente o conteúdo de itens que está no SQLite, porém não carregue na lista de objetos que já está vinculada ao adaptar de sua ListView.

Carregue em uma nova lista. Logo depois limpe a lista de objetos que está vinculada ao adaptar do listView:

list.clear();

Não crie uma nova instância para essa lista, caso contrário perderá o vinculo com o adapter.

Feito isso, coloque todos os dados carregados na nova lista dentro da lista antiga (e agora vazia), como abaixo:

list.addAll( novaLista );

Logo depois acesse o adapter do listView e então invoque:

adapter.notifyDataSetChanged();

Dessa forma o novo item deverá aparecer na lista junto a todos os outros.

Mas certifique-se de que os dados estão realmente sendo salvos. Utilize try..catch para saber o motivo que não está salvando, caso esse seja o problema. Abraço.
Responder
Vinicius (1) (0)
12/11/2016
Fala Thiengo, tudo certo?

Estou trabalhando com o banco de dados Faribase e preciso que a aplicação trabalhe offline e pelo comentário do Rafael você sugeriu trabalhar com o Faribase offline, dei uma lida na documentação aqui e não entendi muita coisa, você pretende continuar com a série de vídeos do Faribase?
Responder
Vinícius Thiengo (1) (1)
15/11/2016
Vinicius, tudo bem?

Pretendo continuar com o conteúdo sobre Firebase, não necessariamente aquela série.

Como ainda não havia trabalhado com sistemas NoSQL, preferi parar com a PlayList para estudar mais o NoSQL e então voltar com vídeos sobre o Firebase. Abraço.
Responder
Rafael (1) (0)
09/09/2016
Boa tarde Thiengo,

Gostaria de uma dica! preciso realizar a sincronização de muitos dados com o banco SQLite do android para uma aplicação que vai trabalhar offline. O que vc me indica para realizar este sincronismo? Outra coisa esses dados serão retornado por um webservice via json!

Desde já agradeço!

Abs,
Rafael
Responder
Vinícius Thiengo (0) (0)
10/09/2016
Rafael, blz?

Recomendo que carregue aos poucos, pois dependendo da quantidade vc pode gerar um crash na APP, isso quando o user estiver utilizando ela.

Carregue no background (com um Service) aos poucos e veja se há a possibilidade de utilizar o Realm ou Firebase ao invés de SQLite, eles tendem a ser mais rápidos para massa de dados. Os links desses estão abaixo. Abraço

Service: http://www.thiengo.com.br/service-android-entendendo-e-utilizando

Firebase: https://firebase.google.com/

Realm: http://www.thiengo.com.br/persistencia-de-dados-com-realm-no-android-parte-1
Responder
19/07/2016
Oi Thiengo, adoro o blog, parabéns. Meu problema é o seguinte, estou tentando criar um banco de dados que grave três parâmetros, nome, ip, e imagem. Porém quando tento criar esse "servidor" aplicativo fecha. No LOG o erro é "Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'long android.database.sqlite.SQLiteDatabase.insert(java.lang.String, java.lang.String, android.content.ContentValues)' on a null object reference
                                                                                  at com.androidcontrol.syanzremote.BD.create(BD.java:89)
                                                                                  at com.androidcontrol.syanzremote.CreateServerActivity.checkInfoAndSave(CreateServerActivity.java:170)"
Sei que deve ser algo bobo que esqueci de estanciar e n consigo enxegar o que é. Minha linha 89 da classe BD é (onde está return): public long create(ServidorModel model) {
        ContentValues values = new ContentValues();
        values.put(DB_COLUMN_NOME_SERVIDOR, model.getNome());
        values.put(DB_COLUMN_IP_SERVIDOR, model.getIp());
        values.put(DB_COLUMN_ICONE, model.getIcone());
        return db.insert(DB_TABLE_NAME, "null", values); //Erro aqui, causa: Tentativa de chamar o método virtual 'long android.database.sqlite.SQLiteDatabase.insert (java.lang.String, java.lang.String, android.content.ContentValues)' em uma referência de objeto nulo em com.androidcontrol.syanzremote.BD.create (BD.java:91) em com.androidcontrol.syanzremote.CreateServerActivity.checkInfoAndSave (CreateServerActivity.java:123)
    //certifique-se de banco de dados não é nulo antes de chamar atualizaçãpo método

    }

E a linha 170 da classe CreateServerActivity é(onde esta o long): ServidorModel newServe = new ServidorModel();
            newServe.setNome(nome);
            newServe.setIp(ip);
            newServe.setIcone(idIcone);

            BD sdao = BDFactory.getBD();
            long id = sdao.create(newServe);

            newServe.setId((int)id);

Desde já obrigada.
Responder
Vinícius Thiengo (0) (0)
01/08/2016
Fala Fernanda, blz?
A sua variável de instância "db" não foi inicializada. Provavelmente a instância a ela é feita no construtor. Corrija isso apenas. Abraço
Responder
marcelo (0) (0)
21/03/2016
Oi, Thiengo parabéns pelo blog, estou com uma duvida usar ou não utilizar ORM para persistir dados no sqlite, oq voce utilizar nas suas aplicações ou melhor você recomenda pela sua experiencia ?
Responder
Vinícius Thiengo (0) (0)
22/03/2016
Fala Marcelo, blz?
Eu hj utilizo o SQLite sem apoio de outras libraries (ORM, por exemplo), mt pq gosto de colocar as SQLs na mão. Mas realmente tem como aumentar a produção com ORM ou bases como o Realm (http://www.thiengo.com.br/persistencia-de-dados-com-realm-no-android-parte-1 ) ou o Firebase (http://www.thiengo.com.br/persistencia-com-firebase-android-parte-1 ) que são bem mais simples de utilizar e configurar que o SQLite na mão. A melhor alternativa depende mt da quantidade de dados prevista e da quantidade de inserções e buscas. O Realm tende a ser bem rápido, mas vc não colocará mão em SQLs convencionais. Abraço
Responder
marcelo (1) (0)
22/03/2016
Oi Thiego, você já utilizou o  robospice? oq pode falar sobre ele ?
Responder
Vinícius Thiengo (1) (0)
23/03/2016
Marcelo, ainda não, mas pelo pouco que li percebi que é mais uma library de trabalho assincrono em conexão remota.. utilizo Retrofit 2.0 (http://www.thiengo.com.br/library-retrofit-2-no-android ) para isso. Abraço
Responder
Lucas Lima (1) (0)
01/09/2015
Fala mano. blz ?
Estou usando o sqlite que você passou para fazer um formulário esta tudo correto porém quando vou salvar ou listar os dados ele fecha a aplicação e quando clico para abrir no ícone diz que não foi instalada. Será que você poderia me ajudar ? Obrigado e Abraço
Responder
Vinícius Thiengo (0) (0)
02/09/2015
Fala Lucas, blz?
O que está sendo printado no LogCat? Abraço
Responder
patrickryuchi5892 (1) (0)
29/08/2015
Opa Thiengo, liguei meu APP ao servidor, é um APP para no máximo 30 usuários, e o cadastro desses usuários vão estar em constantes updates no banco de dados  externo,  mas como faço pro update do usuário "tal"  alterar a linha do mesmo no banco de dados externo ?pensei  em salvar no sqlLite  o nome do usuário ao mesmo tempo que envio ao banco de dados externo,  e quando o usuario fosse atualizar os dados eu pegasse o nome que ficou salvo no sqllite e enviasse pro servidor php e no "Where " eu colocasse esse nome pra ele saber qual linha alterar. Mas sou leigo em programaçao, na verdade o pouco que sei aprendi com seus vídeos. A minha dúvida é: É dessa forma mesmo ou é de outro jeito ?  muito obrigado mesmo.
Responder
Vinícius Thiengo (1) (0)
01/09/2015
Fala Patrick, blz? Se entendi o que quer fazer , vc na verdade quer que a atualização realizada local na APP tenha efeito tb no servidor, na base de dados remota, correto. Porém pode ocorrer de não ter conexão no momento, o que pode fazer é salvar os dados locais e junto a eles uma flag que vai sinalizar aos seus scripts locais se esse dado alterado local já foi ou não sincronizado com a base de dados remota, caso não, assim que houver conexão seus scripts devem enviar esses dados para sincronização. Porém para comparar com o registro correto no servidor, não utilize o nome, pois n outros registros podem ter o mesmo nome, logo utilize um email, por exemplo, ou até mesmo o id do user na base de dados remota, que pode ser o mesmo id na base de dados local. Dessa vai manter os dados atualizados. Abraço
Responder
patrickryuchi5892 (1) (0)
03/09/2015
Na verdade minha intenção não é salvar os dados no sqlLite é salvar só no BD externo pq todos os dados vão ser compartilhados com todos os usuários, quanto a internet coloquei uma verificação e uma mensagem de aviso com o Crouton caso não tenha  conexão. O que eu queria salvar no SQL lite é só um identificador do user pra quando ele atualizar os dados no BD externo eu passaria esse identificador lá no php pra ele modificar a linha referente ao smartphone que fez o cadastro. Muito obrigado mais uma vez Thiengo.
Responder
Vinícius Thiengo (0) (0)
03/09/2015
Ok, show de bola. Conseguiu rodar ai? Abraço
Responder
Marcos (1) (0)
18/06/2015
Como eu faço pra salvar a opção do spinner tipo eu escolhi a opção 2 de um spinner, como eu vou depois ver a opção 2 selecionada na hora da alteração?
Responder
Vinícius Thiengo (0) (0)
19/06/2015
Fala Marcos, blz?
Bom, com o vídeo a cima assumo que vc sabe salvar e buscar dados no SQLite, logo a dúvida que resta é como obter o valor do Spinner e setar esse valor quando ele já estiver definido na base local.

Para obter o valor do Spinner utilize sua variável Spinner como o script abaixo:

Spinner spinner = (Spinner)findViewById(R.id.spinner);
String text = spinner.getSelectedItem().toString();

Depois pegue o "text" e salve no bd. Assim que voltar a mesma Activity / fragment seu script deve verificar se já não existe um valor para o Spinner que será apresentado na tela, se sim, utilize o código abaixo em sua variavel spinner para setar o valor inicial a ela (o 2 que vc tinha perguntado é dessa forma tb):

Spinner spinner = (Spinner)findViewById(R.id.spinner);
spinner.setSelection( inteiroRetornadoDoSQLite );

Assim deve passar sem problemas. Abraço
Responder
Junior (2) (0)
25/05/2015
depois de cadastrado, como faço para fazer login, tem uma xml que você colocou, co usuário e senha, como faço pra ela funcionar?
Responder
Vinícius Thiengo (1) (0)
25/05/2015
Fala Junior, blz?
Vc pega os dados de seus respectivos EditTexts e então verifica no bando se há algum registro com esses login e senha, Pode utilizar o "=" mesmo. Abraço
Responder
fabiano (1) (0)
12/04/2015
Thiengo parabéns pelo video.

Como eu faria para acrescentar um spinner trazendo os dados do banco SQLite?
Responder
Vinícius Thiengo (1) (0)
12/04/2015
Fala Fabiano, blz?
No caso de preencher o spinner com dados do SQLite basta realizar um select com o filtro desejado (clausula where bem formulada as necessidades do spinner) e então colocar os dados retornados em um array e vincular ao spinner por meio do adapter que terá nele. No caso de chamar dados do SQLite a partir de uma seleção do spinner utilize o método setOnItemSelectedListener para setar o listener OnItemSelectedListener. Logo depois coloque a chamada de conteúdo vindo do SQLite dentro do método onItemSelected(). Abraço
Responder
16/01/2015
Thiengo, parabéns pelo conteúdo..
Gostaria de saber como eu deixo os itens da ListView clicáveis para que eu possa editar semelhantemente ao que você faz no projeto do sqlite, mas sem os botões, somente clicando nos itens...
Responder
Vinícius Thiengo (1) (0)
17/01/2015
Fala Allan, blz?
Se quer deixar os itens clicaveis, provavelmente vc não terá buttons dentro dos itens, então basta colocar o listener de item click no ListView. listView.setOnItemClickListener(...); Ai no método onItemClick() desse listener vc coloca a chamada para a página de edição. Abraço
Responder
17/01/2015
no Adapter ou na Activity da list?
Responder
Vinícius Thiengo (0) (0)
19/01/2015
No caso seria no Activity ou no Fragment, no local onde vc declarou seu ListView, pois o listener é vinculado diretamente a instancia do ListView e não aos itens dele. Abraço
Responder
Salatiel (0) (0)
21/12/2014
Caro amigo,
Antes gostaria de parabenizar pelo trabalho.
Agora gostaria de saber onde fica o arquivo da base de dados?
Pois não vejo esse sendo criado em momento algum e sempre estou recebendo erro ao tentar inserir um dado.
at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1341)
Responder
Vinícius Thiengo (0) (0)
22/12/2014
Fala Salatiel, blz?
Segue instruções para acessar o bd gerado pela aplicação (no AndroidStudio, no caso):

1 - Abra seu projeto no AndroidStudio;
2 - Abra o emulador e rode seu projeto nele para gerar o BD SQLite;
3 - Na toolbar do AndroidStudio, no lado esquerdo do icone de Help (que é uma interrogação) tem um robozinho verde do Android, clique nele para abrir o Android Device Monitor;
4 - Na janela a direita clique na aba "File Explorer";
5 - Com a aba File Explorer selecionada vá em: /data/data/nomeDoPacotePrinciaplDeSeuProjeto/databases/ e então no folder databases de seu projeto vc tem acesso aos DB SQLite que sua APP criou, para acessar o conteúdo vc terá de copiar o arquivo para sua máquina e então utilizar um Software cliente do SQLite para acessar os registros.

Se estiver utilizando o Eclipse recomendo que instale o AndroidStudio (http://developer.android.com/sdk/index.html ) e então faça a atualização do AndroidStudio se necessária assim que vc abrir ele. Depois migre seus projetos do Eclipse para ele como o link a seguir mostra (http://developer.android.com/sdk/installing/migrate.html ). Abraço
Responder
Adriel Freitas Alves (0) (0)
04/12/2014
Thiengo,
Essa busca você usa para buscar todos os registros, você possui algum exemplo onde eu posso buscar os registros a partir de uma cláusula where onde eu passo o valor através de um form?
Tentei contato por email também mas não consegui sua resposta.
Responder
Vinícius Thiengo (0) (0)
05/12/2014
Respondido via email.
Responder
Claudinei Arteman (0) (0)
30/09/2014
Thiengo,

Estou gerando meu BD com informações de de CheckBox, spinner e fotos. Eu consigo depois de tudo imputado no BD gerar um pdf com o layout bem definido com esta informações? Ex. Nome do Cliente, a foto do cliente logo abaixo do nome etc..

Muito obrigado,

Claudinei
Responder
Vinícius Thiengo (0) (0)
30/09/2014
Fala Claudinei, blz?
Se vc tiver todos os dados que quer colocar no PDF salvos no bd vc consegue sim, mas não sei se conseguirá fazer o PDF no Android, uma possível solução é enviar os dados para um servidor Web, montar o PDF lá e então enviar o link de acesso ao PDF para o Android e então apresentar esse link ao usuário, assim que ele clicar o download é realizado. Abraço
Responder
Junior (1) (0)
25/05/2015
queria inserir fotos no meu cadastro, como faço isso? li aqui que você coloco. agradeço desde já pela ajuda.
Responder
Vinícius Thiengo (0) (0)
25/05/2015
Junior, salva a imagem em algum diretório do SDCard do device e então apenas o nome dela no SQLite, assim seu script deve saber (tem gravado em alguma constante) qual o path de acesso a imagem depois de ter obtido o nome da imagem do SQLite. Segue dois vídeos que fiz sobre obter imagens no Android:

http://www.thiengo.com.br/acessando-imagens-do-sdcard-e-colocando-na-app-android

http://www.thiengo.com.br/utilizando-a-camera-do-smartphone-em-sua-app-android
Responder
PauloCeami (0) (0)
22/06/2014
Ola thiengo interessante seu post... eu ja uso esse modelo e tenho uma duvida com respeito ao uso do metodo onUpgrade() , eu ja tenho uma app rodando com mais 200 registros e tenho medo de perder esses dados pois preciso colocar novos campos e o android nao me permite colocalos senao pela verificação do oldversion e newversion, eu até sei usar , mas será que nao existe uma forma mais facil de atualizar minhas tabelas ? ja vi alguns modelos que os karas poe todos os dados em um List - > apaga a table -> cria a nova -> insere de novo... o que voce acha ??? desde ja agradeço.
Responder
Vinícius Thiengo (0) (0)
22/06/2014
Respondido no comentário do facebook acima. abraço
Responder
Anderson (0) (0)
02/10/2014
Olá Thiengo, tenho a mesma duvida do PauloCeami, mas não consegui ver a resposta no comentário do facebook, ta cortando
Responder
Vinícius Thiengo (0) (0)
03/10/2014
Fala Anderson, blz?
Segue mesma resposta enviada ao Ceami: "Fala Paulo Ceami, blz? Então o que vc deve fazer é exatamente isso, baixar os dados do bd antes de alterar a estrutura da tabela, guarda em alguma entidade (a lista é uma opção), criar as tabelas com a nova estrutura e então salvar os dados novamente. Comente teste bem antes de colocar em produção, tente simular o máximo o que seus usuários já têm, senão os dados realmente serão perdidos. Abraço"
Responder
22/05/2014
arigatou
Responder