Androidデータベース使用(LitePal)


LitePalは郭神が書いたフレームワークで、ここで再び郭神に敬意を表します.真大神も.この記事は主にLitePalの簡単な使い方とソースコードを提供しています.具体的なメカニズムは郭神のブログで理解しなければならない.住所はこちらです.http://blog.csdn.net/guolin_blog/article/details/38083103 Androidには軽量級関係型データベースSQLiteが内蔵されているため、MySQLやSQLiteの使用経験がある人は軽自動車に慣れていると感じます.しかし、これまでSQLに触れたことがない人にとっては、少し難しいかもしれませんが、基本的な建表命令や添削改ざんは熟練して身につけなければなりません.これはADB(Android Debug Bridge)といえば、その名の通り橋渡しの役割であり、linuxのlsコマンドを使用してAndroidシステムのルートディレクトリを表示すると、ディレクトリの下にあるテーブルが見つかります.adb shellコマンドでは携帯電話にファイルを書き込んだり、携帯電話からファイルを取得したりすることができます.一般的に開発者はLinuxの下のGrepで結果をフィルタリングしてLogを表示したり、インストールされたアプリケーションを出力したり、キーボード入力やスライド入力をシミュレートしたりすることができます.これらのADBコマンドのソースはどこですか.ここでは、ソース・コードのWebサイトを提供します.http://www.androidxref.com adbコマンドとshellコマンドは、systemcoretoolboxとframeworksbasecmdsに由来します.
話が遠くなって,本題に戻る.なぜLitePalを使うのかというと、簡単で使いやすいので、郭神の言葉で言えば、LitePalはオープンソースのAndroidデータベースフレームワークで、オブジェクト関係マッピング(ORM)のモデルを採用し、私たちが普段開発しているときに最もよく使われているデータベース機能をパッケージ化し、SQL文を1行書かなくても様々なテーブルを作成することができます.添削検査の操作を増やす.さらにLitePalは「軽い」、jarパッケージは100 k未満、しかもほぼゼロ構成である点がHibernateのようなフレームワークとは大きく異なる.現在LitePalのソースコードはGitHubに管理されており、アドレスはhttps://github.com/LitePalFramework/LitePal . ORMの考え方を使って、オブジェクト向けの操作方法でデータベースを操作するという簡単な方法を見てみましょう.配置するものは多く言わないで、今主要な操作を理解します:(一)表を建てます
public class News {  

    private int id;  

    //private           ,           ,     public  protected default   。  title             。 
    public String title;  

    private String content;  

    private Date publishDate;  

    private int commentCount;  

    //     get、set   
    ...  
} 

データベースに何か操作がある限り、Newsテーブルは自動的に作成されます.
(二)アップグレードテーブルにNewsテーブルがある場合、コメントCommentテーブルを追加してアップグレードする必要があります.どうすればいいですか.プロファイルで済ませます.元のVersionは1です.アップグレードするたびにバージョン番号+1だけでいいので、リストにこのテーブルを追加します.
<?xml version="1.0" encoding="utf-8"?>  
<litepal>  
    <dbname value="demo" ></dbname>  

    <version value="2" ></version>  

    <list>  
        <mapping class="com.example.databasetest.model.News"></mapping>  
        <mapping class="com.example.databasetest.model.Comment"></mapping>  
    </list>  
</litepal> 

(三)表の関連表の関連は主にいくつかの形式がある:一対一、一対多、多対多.主に外部キーの関係を処理します.一対一のほうが簡単で、外部キーはどの表に置いてもいいです.データベース・テーブルの複数対1の関係は依然として外部キーによって確立されており、複数対1の場合、重要なのは複数のテーブルに追加する必要があります.多対多の場合は特殊で,外部キーで実現するのではなく,中間テーブルで実現する.中間テーブルには、両方の外部キーが格納され、関連付けられます.LitePalではすべての関連が簡単になり、一対一で対応するクラスに相手のフィールドを追加し、一対多でリストを追加し、多対多でリストを追加します.
public class News {  
    ...  
    private Introduction introduction;  

    private List<Comment> commentList = new ArrayList<Comment>();  

    private List<Category> categoryList = new ArrayList<Category>();  

    //     get、set   
}  
public class Comment {  
    ...  
    private News news;  

    //     get、set     
}  
public class Category {  
    ...  
    private List<News> newsList = new ArrayList<News>();  

    //     get、set    
}  

ここで郭神はいくつかの例を挙げて、1つのニュースは1つの紹介に対応して、複数の評論に対応して、ニュースと分類は多対多関係で、特に直観的ではありませんか?
(四)各エンティティクラスを格納し、CRUD操作を行う場合、LitePalはすべてのエンティティクラスがDataSupportというクラスから継承されることを要求する.
public class News extends DataSupport{  

    ......  

    //     get、set   
}  

具体的にはいくつかの重要な方法save()、saveAll()などです
Comment comment1 = new Comment(); 
comment1.setContent("  !"); 
comment1.setPublishDate(new Date()); 
comment1.save(); 
Comment comment2 = new Comment(); 
comment2.setContent("   "); 
comment2.setPublishDate(new Date()); 
comment2.save(); 
News news = new News(); 
news.getCommentList().add(comment1); 
news.getCommentList().add(comment2); 
news.setTitle("       "); 
news.setContent("       "); 
news.setPublishDate(new Date()); 
news.setCommentCount(news.getCommentList().size()); 
news.save(); 

ここには2つのコメント、1つのニュース、多対1の関係が追加されています.set,getメソッドは,最後にsaveで保存すればよい.
(五)修正と削除の操作は簡単です
ContentValues values = new ContentValues();  
values.put("title", "  iPhone6  ");  
DataSupport.update(News.class, values, 2); 

条件の下で複数のidを変更する場合は、次のように書くことができます.
ContentValues values = new ContentValues();  
values.put("title", "  iPhone6 Plus  ");  
DataSupport.updateAll(News.class, values, "title = ? and commentcount > ?", "  iPhone6  ", "0");  

その中のupdateAllの定義はこうです
public static int updateAll(Class<?> modelClass, ContentValues values, String... conditions)  

いずれもclassを入力し、ContentValueを書き、最後に条件に基づいて行データをクエリーします.
ContentValueを書きたくなければ、別の実現方法も考えられます.
News updateNews = new News(); 
updateNews.setTitle("  iPhone6  "); 
updateNews.updateAll("title = ? and commentcount > ?", "  iPhone6  ", "0"); 

直接newはオブジェクトを出し、setメソッドを呼び出し、updateAllまたはupdate(id)
削除操作についても簡潔です.
DataSupport.delete(News.class, id); 
DataSupport.deleteAll(News.class, "title = ? and commentcount = ?", "  iPhone6  ", "0"); 

注意idを削除すると、このidを外部キーとする他のテーブルのデータも同時に削除されます.もう1つの方法は、インスタンスがdeleteメソッドによって実現されるが、このインスタンスはsave以降のように永続化されなければならない.
News news = new News();  
news.setTitle("        ");  
news.setContent("        ");  
news.save();  
...  
news.delete();  

(六)クエリー操作あるidをクエリーする
News news = DataSupport.find(News.class, 1); 

最初のデータと最後のデータのクエリー
News firstNews = DataSupport.findFirst(News.class); 
News lastNews = DataSupport.findLast(News.class); 

配列転送配列もサポート
long[] ids = new long[] { 1, 3, 5, 7 };  
List<News> newsList = DataSupport.findAll(News.class, ids); 

最も特色のあるのは、テーブル全体をクエリーするように接尾辞でクエリーされていることです.
List<News> newsList = DataSupport.where("commentcount > ?", "0").find(News.class); 

クエリー・テーブルの条件を満たす2列のデータ
List<News> newsList = DataSupport.select("title", "content")  
        .where("commentcount > ?", "0").find(News.class); 

最初の10のデータをクエリーし、発行日によって降順にします.
List<News> newsList = DataSupport.select("title", "content")  
        .where("commentcount > ?", "0")  
        .order("publishdate desc").limit(10).find(News.class); 

ここまでデータベースのすべての操作は基本的に含まれています.ここは復習をするだけです.郭神のブログにはもっと詳しい使い方があります.
次に、このフレームワークと上記の操作を使用するためのインスタンスの作成を開始します.