web-dev-qa-db-ja.com

SQLiteDBとContentProviderのベストプラクティス

私のAndroidアプリは、いくつかの異なるアクティビティとサービスからローカルSQLiteDBの読み取りと書き込みを行っています。かなり標準的です。しかし、すべてのDBの詳細を定数として格納し、DBにアクセスする場所で使用する方法には満足していません。 DBをContentProviderでラップするようにアドバイスされました。私にはいいですね。コードをリファクタリングしているときに、次のように尋ねると思いました。

  • AndroidのローカルDBデータストレージのベストプラクティスは何ですか?
  • 「CREATETABLE」ステートメント、列名、その他のSQLをどこにどのように保存しますか?
  • インスタンス化するクラスのリストと、それぞれに含まれるもの(ContentProvider、DatabaseProvider、DatabaseHelper ...)を共有していただけませんか?
  • ローカルのAndroid DBの構造を、RESTインターフェイスから利用できるサーバー側のDBとどのように調整しますか?

ええ、私は多年生の「Androidオブジェクト関係マッピングフレームワークはどこにありますか?」質問。今のところ、私は主に、標準のSDKで利用可能なものを使用してAndroidアプリをどのように構成するかを知りたいと思っています。

いつものように、ポインタをありがとう!

46

チューニングを行っています ORMLite on Androidしばらくの間、正常に機能しています。ORMLiteはAndroidネイティブデータベース呼び出しとJDBCを介して他のデータベースもサポートします。クラス/フィールドに注釈を付け、基本DAOクラスを使用してSQLiteに永続化します。

  • CREATE TABLEステートメントは、ORMLiteのユーティリティクラスで処理されます。ほとんどのSQLはDAOクラスによって処理されます。
  • Android オンラインドキュメント のセクションでは、クラス階層について説明しています。データベースの更新を作成するのに役立つDatabaseHelperを実装します。アクティビティはOrmLiteBaseActivity(またはサービスまたはタブ)を拡張します。これにより、ヘルパーとDAOにアクセスできます。
  • ORMLiteは、リモートRESTサーバーとマージするためのソリューションを提供していません。

これがいくらか役立つことを願っています。

17
Gray

今のところ、私は主に、標準のSDKで利用可能なものを使用してAndroidアプリをどのように構成するかを知りたいと思っています。

私はSQLとそれがAndroidで処理される方法の本当のファンではないので、オブジェクトデータベースを使用します NeoDatis 。基本的には、Javaオブジェクトをデバイスに保存されているフラットファイルに非常に簡単に保存/取得できます。db40は、Androidで動作するもう1つの代替オブジェクトデータベースでもあります。

このアプローチを使用しても問題はありません。NeoDatisライブラリを含めると、APKサイズが最大700kb増加することに注意してください。

1
Duane

リストをどんどん完成させるために...別のORMは、 BARACUS Framework で提供されるORMソリューションです。エンタープライズサイズのデータ​​ベースを構築することは意図されていません。データベースにいくつかのエンティティを格納し、アプリからアクセスできるようにするためのものです。その中にはコード生成アプローチはありません。エンティティpojo、rowmapper、およびテーブルdefを記述するだけです。したがって、DAO、依存性注入、IOCスタイルのライフサイクルサポートなどを利用できます。

これまでのORM機能:

より洗練されたデータベースのものについては(ORMの使用は古き良き春のrowmapperの時代のように少し手作業です)、私は現在ormlite統合を追加することを考えています。

コードの詳細については、 githubのチュートリアルアプリケーション を確認してください。

0
gorefest

Androrm もご覧ください。これは、Android用に特別に設計されたオープンソースのormツールです。それはすべてのデータベース関連のものであなたを助けるはずです。

0
philgiese

答えがあるかどうかはわかりませんが、これがどのように処理されるかがあまり好きではないことを除けば、非常に厄介だと思います。私は通常、SDKに付属しているメモ帳の例に示されているパターンに従います。

このため、私は独自のミニORMフレームワークに取り組んでおり、注釈を使用してこれらすべてを管理しています。これまでのところ問題なく機能していますが、まだすべてを解決していません。

0
broschb