Androidデータベースフレームワーク--litepalの使用

10276 ワード

プロジェクトを書くときにデータベースの関連操作に遭遇し、Androidが提供するデータベースの作成と使用は少し複雑で、比較的良いホイール--フレームワークやツールクラスが使えるかどうかを考えていた結果、litepalが発見され、hibernateのようにオブジェクト向けにデータベースが開発された.万物が対象の世界では、使い心地が爽やかすぎる.
LitePalはオープンソースのAndroidデータベースフレームワークです(https://github.com/LitePalFramework/LitePal)は、オブジェクト関係マッピング(ORM)のモデルを採用し、データベースに対する操作をオブジェクトに対する操作に変換します.
Litepalの使用手順:
1.Android studioでgradleファイルに追加:
dependencies {
    compile 'org.litepal.android:core:1.3.1'
}
はjarパッケージをダウンロードしてプロジェクトに追加することもできます.ダウンロードアドレスは上のgithubアドレスと同じです.
2.assetsディレクトリの下にlitepalを新規作成します.xmlファイル、このファイルはプロファイルであり、litpalはファイルの反射に基づいて関連情報を得る.


    
    
xxx">
    
             。     
  
 3.  LitepalApplication,           context,   LitepalApplication,    context。 
   
  

   :

   

<manifest>
    <application
        android:name="org.litepal.LitePalApplication"
        ...
    >
    ...
    application>
manifest>

すでにアプリケーションがある は、このアプリケーションにLitePalApplicationを させることができます.たとえば、 のプロジェクトでは、 のようにします.
/**
 *   :songwenju on 2016/4/13 21:48
 *   :[email protected]
 */

public class BaseApplication extends LitePalApplication {

    public static Handler getAppHandler() {
        Looper.prepare();
        return new Handler();
    }
}
LitePalApplicationのソースコードを て、このApplicationを してtConextを してグローバルなcontextを ることができます.ソースコードは の りです.
       /**
	 * Get the global application context.
	 * 
	 * @return Application context.
	 * @throws org.litepal.exceptions.GlobalException
	 */
	public static Context getContext() {
		if (sContext == null) {
			throw new GlobalException(GlobalException.APPLICATION_CONTEXT_IS_NULL);
		}
		return sContext;
	}

アプリケーションに がある は
public class MyOwnApplication extends BaseApplication {
    ...
}
このときは の で できます.
public class MyOwnApplication extends BaseApplication {

    @Override
    public void onCreate() {
        super.onCreate();
        LitePalApplication.initialize(this);
    }
    ...
}

4.リストを し、litepalのクラス DataSupportを します. は のプロジェクトです.
package com.wjustudio.phoneManager.javaBean;

import org.litepal.crud.DataSupport;

/**
 * songwenju on 16-4-20 : 12 : 23.
 *   :[email protected]
 */
public class BlackNumInfo extends DataSupport{
    private String blackNum;
    private int mode;

    public String getBlackNum() {
        return blackNum;
    }

    public void setBlackNum(String blackNum) {
        this.blackNum = blackNum;
    }

    public int getMode() {
        return mode;
    }

    public void setMode(int mode) {
        this.mode = mode;
    }

    public BlackNumInfo() {
    }

    @Override
    public String toString() {
        return "BlackNumInfo{" +
                "blackNum='" + blackNum + '\'' +
                ", mode=" + mode +
                '}';
    }
}

データベースのアップグレードは、クラスにフィールドを し、 に したxmlのバージョン を します.
5.データベーステーブルに するcurd
1)データを し、オブジェクトを び すsaveメソッド
2)データを し, にidを っていればfindを い,saveを いる.githubが えた は のとおりです.
Album albumToUpdate = DataSupport.find(Album.class, 1);
albumToUpdate.setPrice(20.99f); // raise the price
albumToUpdate.save();
すべてのデータを したい :
Album albumToUpdate = new Album();
albumToUpdate.setPrice(20.99f); // raise the price
albumToUpdate.update(id);
あるいは の のデータがあって、この でもupdateAllを って、 を たすすべてのデータを して、もし が キーあるいは の の があるならば、1 のデータを したことに します.
Album albumToUpdate = new Album();
albumToUpdate.setPrice(20.99f); // raise the price
albumToUpdate.updateAll("name = ?", "album");

3)
Id:
DataSupport.delete(Song.class, id);
を たすデータを します.
DataSupport.deleteAll(Song.class, "duration > ?" , "350");

4)クエリーデータ
Id:
Song song = DataSupport.find(Song.class, id);
クエリーすべて:
List<Song> allSongs = DataSupport.findAll(Song.class);
クエリー を たすもの:
List<Song> songs = DataSupport.where("name like ?", "song%").order("duration").find(Song.class);

のプロジェクトはMVPのデザインモードを っています. はコードを します.
package com.wjustudio.phoneManager.biz;

import com.wjustudio.phoneManager.javaBean.BlackNumInfo;

import java.util.List;

/**
 * songwenju on 16-4-20 : 12 : 27.
 *   :[email protected]
 */
public interface IBlackNumBiz {
    /**
     *         
     * @return
     */
    List getAllBlackNum();

    /**
     *        
     * @param blackNumInfo
     */
    void insertBlackNum(BlackNumInfo blackNumInfo);

    /**
     *           blackNumInfo
     * @param blackNum
     */
    BlackNumInfo getBlackNumInfo(String blackNum);

    /**
     *        
     * @param blackNumInfo
     */
    void deleteBlackNum(BlackNumInfo blackNumInfo);

    /**
     *        
     * @param blackNumInfo
     */
    void updateBlackNum(BlackNumInfo blackNumInfo);

    /**
     *          
     * @param blackNum
     * @return
     */
    boolean isExist(String blackNum);

}
package com.wjustudio.phoneManager.biz;

import android.content.ContentValues;

import com.wjustudio.phoneManager.javaBean.BlackNumInfo;

import org.litepal.crud.DataSupport;

import java.util.List;

/**
 * songwenju on 16-4-20 : 13 : 23.
 *   :[email protected]
 */
public class BlackNumBizImpl implements IBlackNumBiz {
    public static final int BLACK_NUM_PHONE = 1;
    public static final int BLACK_NUM_SMS = 2;
    public static final int BLACK_NUM_ALL = 3;


    @Override
    public List getAllBlackNum() {
        return DataSupport.findAll(BlackNumInfo.class);
    }

    @Override
    public void insertBlackNum(BlackNumInfo blackNumInfo) {
        blackNumInfo.saveThrows();
    }

    @Override
    public BlackNumInfo getBlackNumInfo(String blackNum) {
        List blackNumInfos = DataSupport.where("blackNum = ?", blackNum).find(BlackNumInfo.class);

        return blackNumInfos.get(0);
    }

    @Override
    public void deleteBlackNum(BlackNumInfo blackNumInfo) {
        if (!blackNumInfo.isSaved()) {
            blackNumInfo.save();
        }

        blackNumInfo.delete();
    }

    @Override
    public void updateBlackNum(BlackNumInfo blackNumInfo) {
        ContentValues values = new ContentValues();
        values.put("mode", blackNumInfo.getMode());
        DataSupport.updateAll(BlackNumInfo.class, values, "blackNum = ?", blackNumInfo.getBlackNum());
    }

    @Override
    public boolean isExist(String blackNum) {
        List blackNumInfos = DataSupport.where("blackNum = ?", blackNum).find(BlackNumInfo.class);

        return blackNumInfos !=null && blackNumInfos.size()> 0;
    }


}
は、このようにプロジェクトでBlackNumBizImplのオブジェクトを してデータベースを することができます.