編輯:關於Android編程
做Android開發,避免不了要和SQLite打交道,如果不使用任何框架,直接使用它時,我們往往需要做許多額外的工作,像編寫 SQL 語句與解析查詢結果等,那麼是比較麻煩的!目前市面都出現好多比較好用的ORM數據庫框架,例如郭神出的LitePal,OrmLite,GreenDAO等。那麼今天就來介紹一下GreenDAO的有關使用。
一、GreenDAO概述。
簡單的講,GreenDAO是一個將對象映射到 SQLite 數據庫中的輕量且快速的 ORM 解決方案。
GreenDAO是一個可以幫助Android開發者快速將Java對象映射到SQLite數據庫的表單中的ORM解決方案,通過使用一個簡單的面向對象API,開發者可以對Java對象進行存儲、更新、刪除和查詢。
1.GreenDAO官網,http://greendao-orm.com/。
2.項目地址,https://github.com/greenrobot/greenDAO。
GreenDAO設計的主要目標
(1). 一個精簡的庫
(2). 性能最大化
(3).內存開銷最小化
(4).易於使用的 APIs
(5).對 Android 進行高度優化
3.核心類說明
(1).DaoMaster 保存了數據庫對象和管理DAO類的classes,其提供了一些靜態方法創建和刪除表,內部類OpenHelper和DevOpenHelper 實現了SQLiteOpenHelper並創建數據庫的框架。
(2)DaoSession 管理所有可用的DAO對象,可以通過getter方法獲得。DaoSession還提供了一些通用的持久性方法比如插入、加載、更新,刷新和刪除實體。
(3).EntityDao 數據訪問對象,每一個實體類都有對應的greenDAO對象。
(4).Entity 實體類對象。
二、配置GreenDAO框架。
目前GreenDAO已經更新到3.*,新版本的使用方法和GreenDAO2.*有所不同,本文基於的是GreenDAO2.*,需要大家注意!
1.如果你使用的Android Studio,那麼配置使用GreenDAO很簡單,只需要在Gradle文件中加入依賴,
compile "de.greenrobot:greendao:*"
就可以了!Gradle會幫你遠程下載這個GreenDAO框架。
2.如果你使用的還是Eclipse,那麼就需要下載jar,導入到項目即可使用,你可以在http://search.maven.org中搜索以下三個jar下載,
greendao-generator.jar,freemarker.jar,greendao.jar
三、創建Java工程,生成DAO 文件。
如果你使用的還是Eclipse需要創建一個Java工程,該工程主要用來生成生成數據庫表對應的java實體和處理業務的dao層代碼。需要導入包greendao-generator.jar和freemarker.jar。下面,是使用Android Studio實現的。
前提
打開Android Studio,新建一個Project,在module中‘src/main’目錄下,新建一個目錄,名稱為‘java-gen’,
然後需要在該module的build.gradle中,加入如下代碼,
android { ... sourceSets { main { java.srcDirs = ['src/main/java', 'src/main/java-gen'] } } ... } dependencies { ... compile 'de.greenrobot:greendao:2.1.0' }
1. 新建一個Java工程。在Project右鍵,“NEW-Module”,然後在頁面中選擇‘java Library’,
2.在該java工程的build.gradle中,需要引入依賴,
compile 'de.greenrobot:greendao-generator:2.1.0'3. 新建一個類 ExampleDaoGenerator,具體代碼如下,
public static void main(String[] args) throws Exception { //第一個參數是數據庫版本號,第二個參數是包的根目錄的包 int version=1; String defaultPackage="cn.xinxing.model"; Schema schema = new Schema(version, defaultPackage); //指定自動生成的dao對象的包名,不指定則都DAO類生成在defaultPackage包中 schema.setDefaultJavaPackageDao("cn.xinxing.dao"); //添加實體 addEntity(schema); addNote(schema); try { //第二個參數是src-gen文件夾路徑 String outDir="E:/as_workspace/test/greendaotest/src/main/java-gen"; new DaoGenerator().generateAll(schema,outDir); } catch (Exception e) { e.printStackTrace(); } } private static void addEntity(Schema schema) { //一個實體(類)就關聯到數據庫中的一張表 Entity entity = schema.addEntity("Student"); //指定表名,如不指定,表名則為 Entity(即實體類名) entity.setTableName("student"); //給實體類中添加屬性(即給表中添加字段) entity.addIdProperty().autoincrement();//添加Id,自增長 entity.addStringProperty("name").notNull();//添加String類型的name,不能為空 entity.addIntProperty("age");//添加Int類型的age entity.addDoubleProperty("score");//添加Double的score } private static void addNote(Schema schema) { // 一個實體(類)就關聯到數據庫中的一張表,此處表名為「Note」(既類名) Entity note = schema.addEntity("Note"); // 指定表名,如不指定,表名則為實體類名 note.setTableName("note"); // greenDAO 會自動根據實體類的屬性值來創建表字段,並賦予默認值 //給實體類中添加屬性(即給表中添加字段) note.addIdProperty().autoincrement();//添加Id,自增長 note.addStringProperty("text").notNull();//不能為空 note.addStringProperty("comment"); note.addDateProperty("date"); }說明,
(1).創建模型或者說創建表 需要用到Schema類(數據庫對象的集合),
// 第一個參數是數據庫版本號,第二個參數是根目錄的包路徑 int version=1; String defaultPackage="cn.xinxing.model"; Schema schema = new Schema(version, defaultPackage);(2).指定自動生成的dao對象的包名,不指定則都DAO類生成在defaultPackage包中
schema.setDefaultJavaPackageDao("cn.xinxing.dao");(3).添加實體(通過實體類創建出表以及字段)
private static void addEntity(Schema schema) { //一個實體(類)就關聯到數據庫中的一張表 Entity entity = schema.addEntity("Student"); //指定表名,如不指定,表名則為 Entity(即實體類名) entity.setTableName("student"); //給實體類中添加屬性(即給表中添加字段) entity.addIdProperty().autoincrement();//添加Id,自增長 entity.addStringProperty("name").notNull();//添加String類型的name,不能為空 entity.addIntProperty("age");//添加Int類型的age entity.addDoubleProperty("score");//添加Double的score }
(4). 生成DAO,
String outDir="E:/as_workspace/test/greendaotest/src/main/java-gen"; new DaoGenerator().generateAll(schema,outDir); //第二個參數是src-gen文件夾相對路徑
寫完以上代碼後,運行該java工程,在控制台如果輸入如下信息,說明成功了,如果出錯,請按照錯誤提示處理。
然後我們打開java-gen目錄,便會看到
至此,生成DAO已經完成了,下面就看如何使用這些文件,
四、使用。
為了管理以及使用方便,我們創建一個DbHelper 類,通過它來管理有關數據庫操作。
DbHelper 的具體實現如下,
public class DbHelper { private static DbHelper instance; private DaoMaster.DevOpenHelper helper; private SQLiteDatabase db; private DaoMaster mDaoMaster; private DaoSession mDaoSession; private StudentDao mStunentDao; public static synchronized DbHelper getInstance(Context context) { if (instance == null) instance = new DbHelper(context); return instance; } private DbHelper(Context context) { helper = new DaoMaster.DevOpenHelper(context, "xinxing-db", null); db = helper.getWritableDatabase(); mDaoMaster = new DaoMaster(db); mDaoSession = mDaoMaster.newSession(); mStunentDao = mDaoSession.getStudentDao(); mStunentDao.getDatabase(); } /** * 向student表中插入一條數據 * * @param student */ public void insertStudent(Student student) { mStunentDao.insert(student); } /** * 向student表中插入多條數據 * * @param list */ public void insertStudent(Listlist) { for (Student s : list) { mStunentDao.insert(s); } } /** * 獲取所有的student表中數據 * * @return */ public List getAllStudents() { return mStunentDao.loadAll(); } public void closeDb() { if (db.isOpen()) db.close(); } }
上面是簡單操作數據庫的方法,下面在Activity中編寫測試代碼,
public class MainActivity extends AppCompatActivity { Button btn; TextView tv; Student mStudent; StringBuffer stringBuffer; int i = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); DbHelper.getInstance(MainActivity.this).deleteAllStudent(); stringBuffer = new StringBuffer(); btn = (Button) findViewById(R.id.addData); tv = (TextView) findViewById(R.id.tv); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { i++; stringBuffer.setLength(0); mStudent=new Student(); mStudent.setName("job" + i); mStudent.setAge(i); mStudent.setScore(100d-i); DbHelper.getInstance(MainActivity.this).insertStudent(mStudent); List下面是運行後點擊多次按鈕的效果截圖,list = DbHelper.getInstance(MainActivity.this).getAllStudents(); for (Student s : list) { stringBuffer.append(s.getName() + s.getAge() + s.getScore()+"\n"); } tv.setText(stringBuffer.toString()); } }); } }
下面是數據庫中的student表數據截圖,
至此,使用GreenDAO創建數據庫以及表,插入數據,顯示數據都已經成功了!是不是很簡單呢!下篇文章講解使用GreenDAO來做一些復雜的查詢操作以及更新!
簡介:為什麼要用Fragment?使用Fragment可以在一個Activity中實現不同的界面。Fragment與Fragment之間的動畫切換,遠比Activity與
一、知識點講解當我們點擊系統自帶的按鈕時,按鈕的外觀會發生變化。上篇博文中我們畫了一個三角形按鈕,但點擊還不能變色,下面我們就來實現點擊變色功能。從知識體系上我們需要了解
本文實例講述了Android編程之基於Log演示一個activity生命周期。分享給大家供大家參考,具體如下:利用Android的Log 演示一個activity的生命周
RatingBar介紹 RatingBar作為評分組件,它在實現打分功能的時候確實很方便,並結合了手勢觸摸事件;RatingBar 的實質是 ProgressBar ,可