天天看點

Greendao操作資料庫

1.配置

第一步 先在 項目的Project 的 buil.gradle 裡 在buildscript- repositories添加配置mavenCentral(),

在dependencies 裡添加

classpath’org.greenrobot:greendao-gradle-plugin:3.1.0

buildscript {  
    repositories {        
           jcenter()       
           mavenCentral()   
   }    
dependencies {        
    classpath 'com.android.tools.build:gradle:2.1.0'         
    classpath 'org.greenrobot:greendao-gradle-plugin:3.1.0'  
  }

}
           
Greendao操作資料庫

第二步 在自己想要用的

GreenDao Module 裡的 dependencies 裡添加

compile'org.greenrobot:greendao:3.1.0'
compile'org.greenrobot:greendao-generator:3.1.0'
           
Greendao操作資料庫

android 裡 添加

greendao{
schemaVersion1   
daoPackage'com.afa.tourism.greendao.gen'
targetGenDir'src/main/java'
}
           

schemaVersion: 資料庫schema版本,也可以了解為資料庫版本号

daoPackage:設定DaoMaster、DaoSession、Dao包名

targetGenDir:設定DaoMaster、DaoSession、Dao目錄

targetGenDirTest:設定生成單元測試目錄

generateTests:設定自動生成單元測試用例

頭部 添加

Greendao操作資料庫

第三步 建立新的實體類

在實體類 上方 寫 上 @Entity 即可!然後導包而且不需要寫set get 方法。 他自動幫我們生成.. 是不是很牛逼哦?

@Entity
public class User {   
 @Id(autoincrement = true)    
private Long id;    
private String name;    
private String age;    
private String sex;    
private String salary;
}
           

1.)實體@Entity注解

schema:告知GreenDao目前實體屬于哪個schema

active:标記一個實體處于活動狀态,活動實體有更新、删除和重新整理方法

nameInDb:在資料中使用的别名,預設使用的是實體的類名

indexes:定義索引,可以跨越多個列

createInDb:标記建立資料庫表**

2.)基礎屬性注解

@Id :主鍵 Long型,可以通過@Id(autoincrement = true)設定自增長

@Property:設定一個非預設關系映射所對應的列名,預設是的使用字段名舉例:@Property (nameInDb=”name”)

@NotNul:設定資料庫表目前列不能為空

@Transient:添加次标記之後不會生成資料庫表的列

3.)索引注解

@Index:使用@Index作為一個屬性來建立一個索引,通過name設定索引别名,也可以通過unique給索引添加限制

@Unique:向資料庫列添加了一個唯一的限制

4.)關系注解

@ToOne:定義與另一個實體(一個實體對象)的關系

@ToMany:定義與多個實體對象的關系

(一) @Entity 定義實體

@nameInDb 在資料庫中的名字,如不寫則為實體中類名

@indexes 索引

@createInDb 是否建立表,預設為true,false時不建立

@schema 指定架構名稱為實體

@active 無論是更新生成都重新整理

(二) @Id

(三) @NotNull 不為null

(四) @Unique 唯一限制

(五) @ToMany 一對多

(六) @OrderBy 排序

(七) @ToOne 一對一

(八) @Transient 不存儲在資料庫中

(九) @generated 由greendao産生的構造函數或方法

//必須要先擷取實體類的Dao對象才能進行資料的增删改查操作

1.增

TestUser t = new TestUser();
 t.setName(username);
 t.setPassword(userpw);
 //使用testUserDao對象直接将對象插入資料庫
 testUserDao.insert(t);
           

2.删

//删除所有的資料
testUserDao.deleteAll();
Toast.makeText(this, "删除成功", 
           
//根據name進行删除
方式一:
String name = deletebyidEdit.getText().toString().trim();
 QueryBuilder qb1 = testUserDao.queryBuilder().where(TestUserDao.Properties.Name.eq(name));
 List<TestUser> list1 = qb1.list();
testUserDao.delete(list1.get());
Toast.makeText(this, "删除成功", Toast.LENGTH_SHORT).show();

方式二:
testUserDao.deleteByKey(name );
           

3.改

String updataname = updatebyidEdit.getText().toString().trim();
String newname = newnameEdit.getText().toString().trim();
TestUser finuser = testUserDao.queryBuilder().where(TestUserDao.Properties.Name.eq(updataname)).build().unique();
                if (finuser != null) {
                    finuser.setName(newname);
                }
                testUserDao.update(finuser);
                Toast.makeText(this, "更新成功", Toast.LENGTH_SHORT).show();
           

4.查

//根據ID進行查詢
String queryid = qureybyidEdit.getText().toString().trim();
 QueryBuilder qb = testUserDao.queryBuilder().where(TestUserDao.Properties.Name.eq(queryid ));
List<TestUser> list = qb.list();
result.setText("查詢結果是:" + list.get().toString());
           
//查詢出所有資料
 List<TestUser> users = testUserDao.loadAll();
StringBuffer usersbuffer = new StringBuffer();
for (int i = ; i < users.size(); i++) {
      usersbuffer.append(users.get(i).toString());
   }
  result.setText("查詢結果是:" + usersbuffer.toString());
           

執行sql 語句

String sql ="insert into user values (null,'111')";
 testUserDao.execSQL(sql);