一、使用步驟
1.導入三個jar包,greendao.jar、greendao-generator.jar、freemarker.jar(鏈接地址)。
2.新建一個Java類GenerateDao,運行以下代碼:
public class GenerateDao {
public static void main(String[] args) throws Exception {
int version = 1; //數據庫的版本號,用來更新數據庫
String defaultJavaPackage = "com.wen.greendaodemo.db"; //GreenDao生成的類所在包路徑,最好寫成“包名+目錄名”
String outDir = "../GreenDaoDemo/app/src/main/java"; //外部路徑
Schema schema = new Schema(version, defaultJavaPackage); //創建Schema
addPerson(schema); //在Schema中添加實體
new DaoGenerator().generateAll(schema, outDir); //outDir+defaultJavaPackage目錄下自動生成GreenDao需要的代碼DaoMaster、DaoSession、XX實體類以及XXDao。
}
public static void addPerson(Schema schema) {
Entity entity = schema.addEntity("Person"); //此處會生成實體類,所以命名的時候建議使用駝峯規則。並會將其映射成對應的表。
entity.addIdProperty().autoincrement().primaryKey().unique();
entity.addStringProperty("name");
}
}
3.新建數據庫並往其中添加數據:
public class MainActivity extends Activity {
private SQLiteDatabase writableDatabase;
private DaoMaster daoMaster;
private DaoSession daoSession;
private PersonDao personDao;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
createDataBase();
initDataBase();
addPerson();
}
/**
* 第一次執行的時候會創建數據庫
*/
private void createDataBase() {
DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(this, "wen", null); //傳入數據庫的名字
writableDatabase = devOpenHelper.getWritableDatabase(); //第一次執行的時候會在此處創建數據庫
}
/**
* 初始化數據庫的常用參數 daoMaster、daoSession以及xxxDao
*/
private void initDataBase() {
daoMaster = new DaoMaster(writableDatabase);
daoSession = daoMaster.newSession();
personDao = daoSession.getPersonDao();
}
/**
* 增
*/
private void addPerson() {
for (int i = 0; i < 10; i++) {
Person person = new Person(); //每次都要new一個,否則會報primary key not unique異常
person.setName("zbw" + i);
personDao.insert(person);
}
}
}
4.刪、改、查的使用:
/**
* 刪
*/
private void deletePerson() {
personDao.deleteByKey(1L); //傳入的爲Id
}
/**
* 改
*/
private void updatePerson() {
Person person = new Person();
person.setName("zbw update");
person.setId(2L);
personDao.update(person);
}
/**
* 查
*/
private void queryPerson() {
List<Person> personList = personDao.queryBuilder().where(PersonDao.Properties.Name.eq("zbw2")).list();
for(Person person : personList) {
Log.e("zbw",""+person.getId() + person.getName());
}
}
二、數據庫升級
由於GreenDao默認升級會刪除所有表並重新創建所有表,所以每次升級數據庫都需要重新修改upgrade()方法,升級可以按以下步驟進行修改:
public class DBUpgradeHelper {
public static void upgradeDB(SQLiteDatabase db, int oldVersion, int newVersion) {
int currentVersion = oldVersion;
while (currentVersion <= newVersion){
upgradeByVersion(db , currentVersion);
currentVersion++;
}
}
private static void upgradeByVersion(SQLiteDatabase db, int currentVersion) {
switch (currentVersion){
case 1:
upgradeDB1To2(db);
break;
case 2:
upgradeDB2To3(db);
break;
}
}
private static void upgradeDB1To2(SQLiteDatabase db) {
//創建新表或者更新表結構
}
private static void upgradeDB2To3(SQLiteDatabase db) {
//創建新表或者更新表結構
}
}
4.在DevOpenHelper的onUpgrade()方法中調用上面代碼的upgradeDB()方法,並在對應的位置寫下修改數據庫的語句。