当前位置: 代码迷 >> 综合 >> android greenDao SQLite数据库操作工具类使用
  详细解决方案

android greenDao SQLite数据库操作工具类使用

热度:52   发布时间:2023-12-17 21:47:39.0
上一篇介绍了如何建立类生成工程,现在介绍如何使用。

以下是ExampleDaoGenerator工程代码,做了一些修改。

[java] view plain copy
  1. /* 
  2.  * Copyright (C) 2011 Markus Junginger, greenrobot (http://greenrobot.de) 
  3.  * 
  4.  * Licensed under the Apache License, Version 2.0 (the "License"); 
  5.  * you may not use this file except in compliance with the License. 
  6.  * You may obtain a copy of the License at 
  7.  * 
  8.  *      http://www.apache.org/licenses/LICENSE-2.0 
  9.  * 
  10.  * Unless required by applicable law or agreed to in writing, software 
  11.  * distributed under the License is distributed on an "AS IS" BASIS, 
  12.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
  13.  * See the License for the specific language governing permissions and 
  14.  * limitations under the License. 
  15.  */  
  16. package de.greenrobot.daogenerator.gentest;  
  17.   
  18. import de.greenrobot.daogenerator.DaoGenerator;  
  19. import de.greenrobot.daogenerator.Entity;  
  20. import de.greenrobot.daogenerator.Property;  
  21. import de.greenrobot.daogenerator.Schema;  
  22. import de.greenrobot.daogenerator.ToMany;  
  23.   
  24. /** 
  25.  * Generates entities and DAOs for the example project DaoExample. 
  26.  *  
  27.  * Run it as a Java application (not Android). 
  28.  *  
  29.  * @author Markus 
  30.  */  
  31.   
  32.   
  33. public class ExampleDaoGenerator {  
  34.   
  35.     public static void main(String[] args) throws Exception {  
  36.         //该方法第一个参数用来更新数据库版本号,第二个参数为要生成的DAO类所在包路径。  
  37.         Schema schema = new Schema(1"de.greenrobot.daoexample");  
  38.   
  39.         //然后进行建表  
  40.         addNote(schema);  
  41.         //addCustomerOrder(schema);  
  42.   
  43.         //设置要生成DAO文件的目标工程的项目路径,其中src-gen这个目录名需要在运行前手动创建,否则会报错  
  44.         new DaoGenerator().generateAll(schema, "../../HelloWorld/src-gen");  
  45.     }  
  46.   
  47.     private static void addNote(Schema schema) {  
  48.         /** 
  49.          *   在使用greenDAO时,一个实体类只能对应一个表,目前没法做到一个表对应多个实体类,或者多个表共用一种对象类型。 
  50.          *   后续的升级也不会针对这一点进行扩展。 
  51.          * */  
  52.         Entity note = schema.addEntity("Note");//创建表  
  53.         //note.addIdProperty();     //增加ID列  
  54.         note.addIdProperty().primaryKey().autoincrement();//设置一个自增长ID列为主键:  
  55.         note.addStringProperty("text").notNull();//创建非空的列  
  56.         note.addStringProperty("comment").unique();//创建唯一的  
  57.         //note.addDateProperty("date");  
  58.     }  
  59.   
  60.     private static void addCustomerOrder(Schema schema) {  
  61.         Entity customer = schema.addEntity("Customer");  
  62.         customer.addIdProperty();  
  63.         customer.addStringProperty("name").notNull();  
  64.   
  65.         Entity order = schema.addEntity("Order");  
  66.         order.setTableName("ORDERS"); // "ORDER" is a reserved keyword  
  67.         order.addIdProperty();  
  68.         Property orderDate = order.addDateProperty("date").getProperty();  
  69.         Property customerId = order.addLongProperty("customerId").notNull().getProperty();  
  70.         order.addToOne(customer, customerId);  
  71.   
  72.         ToMany customerToOrders = customer.addToMany(order, customerId);  
  73.         customerToOrders.setName("orders");  
  74.         customerToOrders.orderAsc(orderDate);  
  75.     }  
  76.   
  77. }  

上面代码主要有两个:

Schema schema = new Schema(1, "de.greenrobot.daoexample");

第一个参数为版本号,第二个参数为产生的类放在引用工程的那个地方,需要结合下面代码。

new DaoGenerator().generateAll(schema, "../../HelloWorld/src-gen");

那么产生的文件将放到ExampleDaoGenerator工程目录的上上两级目录下的  HelloWorld/src-gen/de/greenrobot/daoexample 目录下。

1、我们在ExampleDaoGenerator工程下,按下键盘的 ctrl+F11 。则会自动生成四个java类放到HelloWorld/src-gen/de/greenrobot/daoexample目录下面。


2、把这4个类依赖的相关类放到一起,依赖的类直接把 "greenDAO-master\DaoCore\src\de"目录下的内容放到一起4个类一起。


3、将src-gen目录设置为编译文件夹。


4、根据生成类增加相关代码,这里只贴相关用到的代码。

[java] view plain copy
  1.     private DaoMaster daoMaster;  
  2.     private DaoSession daoSession;  
  3.     private NoteDao noteDao;  
  4.   
  5.     private Cursor cursor;  
  6.     private SQLiteDatabase db;  
  7.     @Override  
  8.     protected void onCreate(Bundle savedInstanceState) {  
  9.         super.onCreate(savedInstanceState);  
  10.         setContentView(R.layout.activity_main);  
  11.           
  12.   
  13.        DevOpenHelper helper = new DaoMaster.DevOpenHelper(MainActivity.this"Note"null);  
  14.         db = helper.getWritableDatabase();  
  15.         daoMaster = new DaoMaster(db);  
  16.         daoSession = daoMaster.newSession();  
  17.         noteDao = daoSession.getNoteDao();  
  18. }  

[java] view plain copy
  1. final Button btn6 = (Button) findViewById(R.id.button6);  
  2. btn6.setOnClickListener(new OnClickListener() {  
  3.     public void onClick(View v) {  
  4.   
  5.       Toast.makeText(MainActivity.this"长度 :" + noteDao.count(),  
  6.         Toast.LENGTH_SHORT).show();  
  7.       Note note = new Note(null"noteText1""comment1");   
  8. try {  
  9.     noteDao.insert(note);  
  10.       
  11. catch (Exception e) {  
  12.        Toast.makeText(MainActivity.this"数据重复 :" + noteDao.count(),  
  13.             Toast.LENGTH_SHORT).show();  
  14. }  
  15.     

5、按ctrl+shift+o自动补齐相关类。

6、下载APK到手机,即可。


补充:

在调试过程中,修改了生成工程的类之后发现,重新编译helloworld工程有出现代码异常的情况,代码位于"db = helper.getWritableDatabase();"。

该问题暂时未知道什么原因。但有方法解决:在手机端-->在设置界面-->选择对应的应用(对于我来说,是helloworld这个应用。)-->清除数据  、

  相关解决方案