Android: ContentProvider paira cada tabela / manipulação de relacionamentos de um paira muitos

Ao usair um fornecedor de conteúdo paira o access ao database SQLite

  1. É melhor praticair ter um provedor de conteúdo paira cada tabela ou usair uma paira todas as tabelas?
  2. Como lidair com relacionamentos de um a muitos ao criair novos registros?

  • Definir níveis de aviso do estúdio Android
  • O Android obtém o alto do conteúdo do webview uma vez que foi processado
  • Como posso dair um estilo em negrito no Android?
  • PairseSdkContent falhou Não foi possível inicializair a class android.graphics.Typeface
  • Como pausair / continuair o tópico no Android?
  • Implementando um paira um e grupo de bate-papo no android
  • Android Keystore getEntry () e generateKeyPair () lançair Exceções às vezes
  • Como altero a cor do ícone da guia selecionada do TabLayout?
  • Como viewificair a connection de internet atual está disponível ou não no Android
  • O server do Google GCM retorna Erro não autorizado 401
  • JsonMappingException: token START_ARRAY
  • Android Ligue paira um método de outra class
  • 3 Solutions collect form web for “Android: ContentProvider paira cada tabela / manipulação de relacionamentos de um paira muitos”

    Um ContentProvider não é um database

    Um ContentProvider é uma forma de publicair (ou semi-publicamente) dados de access como conteúdo. Isso pode ser feito de várias maneiras, através do access a files, SQLite ou mesmo access à internet. Um ContentProvider por si só não é um database, mas você pode programair um database paira ele. Você também pode ter vários ContentProviders acessando o mesmo database, mas distribuindo diferentes níveis de access ou o mesmo conteúdo de diferentes maneiras de acordo com o solicitante.

    O que você realmente está perguntando não é uma questão do ContentProvider, mas uma questão de database "Como lidair com relacionamentos em um database SQLite" porque o ContentProvider não usa nenhum código de database, a less que você diga isso através de um SQLiteOpenHelper e outras classs similaires. Então, você simplesmente precisa programair seu access ao database corretamente e seu database SQLite funcionairá como desejado.

    Um database é um database

    Nos velhos tempos, os bancos de dados eram simplesmente files planos, onde cada tabela era muitas vezes sua própria entidade paira permitir o crescimento. Agora, com SGBD, há muito poucas razões paira fazer isso. O SQLite é como qualquer outra plataforma de database a este respeito e pode abaircair tantas tabelas como você tem espaço paira mantê-las.

    SQLite

    Existem certos resources que o SQLite lida bem, alguns que manipulam – mas não estão bem, e alguns que não lida com todos. Os relacionamentos são uma das coisas que foram excluídas de algumas viewsões do SQLite do Android, porque ela foi enviada sem suporte de key estrangeira. Este foi um recurso altamente solicitado e foi adicionado no SQLite 3.6.22 que não foi enviado até o Android 2.2. Ainda há muitos erros relatados, no entanto, nas primeiras encairnações.

    Android pré 2.2

    Felizmente, sendo compatível com SQL e um SGBD simples (não RDBMS neste momento), há algumas maneiras fáceis de resolview isso, afinal, uma key estrangeira é apenas um campo em outra tabela.

    1. Você pode aplicair as INSERT e UPDATE database criando CONSTRAINT s quando você usa a instrução CREATE TABLE .
    2. Você pode consultair a outra tabela paira o _id apropriado paira obter sua key externa.
    3. Você pode consultair sua tabela de origem com qualquer declairação SELECT apropriada usando um INNER JOIN , aplicando uma pseudo-relação.

    Uma vez que a viewsão do Android do SQLite não impõe relações diretamente, se você quisesse CASCADE ON DELETE você teria que fazê-lo manualmente. Mas isso pode ser feito através de uma outra instrução SQL simples. Eu essencialmente escrevi minha própria biblioteca paira impor esses types de relacionamentos, pois tudo deve ser feito manualmente. Devo dizer, no entanto, a eficiência do SQLite e do SQL como um todo torna isso muito rápido e fácil.

    Em essência, o process paira qualquer relação forçada é o seguinte:

    • Em uma consulta que requer uma key externa, use um JOIN .
    • Em um INSERT use um CONSTRAINT no campo de key estrangeira de NOT NULL
    • Em um UPDATE no campo da key primária que é uma key estrangeira em outra TABLE , execute um segundo UPDATE na TABLE relacionada que tenha a key estrangeira. (ACTUALIZAÇÃO DE CASCADE)
    • Paira um DELETE com os mesmos pairâmetros, faça outro DELETE com o qual for foreign_key = _id (certifique-se de obter o _id antes de DELETE a linha, primeiro).

    Android 2.2+

    As foreign keys são suportadas, mas estão desativadas por padrão. Primeiro você precisa ativá-los:

     db.execSQL("PRAGMA foreign_keys=ON;"); 

    Em seguida, você deve criair o relacionamento TRIGGER . Isso é feito quando você cria a TABLE , em vez de uma declairação TRIGGER sepairada. Ver abaixo:

     // Added at the end of CREATE TABLE statement in the MANY table FOREIGN KEY(foreign_key_name) REFERENCES one_table_name(primairy_key_name) 

    Paira obter mais informações sobre o SQLite e suas capacidades, consulte o site oficial do SQLite . Isso é importante porque você não possui todas as JOIN que você faz em outros RDBMS. Paira informações específicas sobre as classs SQLite no Android, leia a documentation .

    Quanto à primeira pergunta: você não precisa criair um provedor de conteúdo paira cada tabela. Você pode usair com várias tabelas, mas a complexidade do provedor aumentou com cada tabela.

    Um fornecedor de conteúdo é aproximadamente equivalente ao conceito de um database. Você teria várias tabelas em um database, então ter várias tabelas em seu provedor de conteúdo faz todo o sentido.

    Um paira muitos relacionamentos podem ser tratados como em qualquer outro database. Use references e foreign keys como você fairia com qualquer outro database. Você pode usair coisas como CASCADE ON DELETE paira gairantir que os registros sejam excluídos quando os registros que eles fazem reference em outras tabelas também são excluídos.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.