xutils中dbutils的基础使用详解

来源:互联网 发布:java中类的修饰符 编辑:程序博客网 时间:2024/05/17 03:00

转载:http://blog.csdn.net/z358247505/article/details/45971313

做安卓开发无可避免的用到数据库,直接自己封装也是可以的,这个下一篇再写,现在先来看看xutils的dbutils的使用方式:

1.下载xutls(网址:https://github.com/wyouflf/xUtils)

2.项目中直接引用或者只是把jar包拷贝进项目的libs文件夹

3.自己封装下,把需要用到的接口封装出来(DatabaseUtils.java)

4.这里给出创建db跟数据库升级的代码,如下:

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. public static DatabaseUtils getInstance(Context context) {//单例  
  2.         if (dbUtils == null) {  
  3.             dbUtils = new DatabaseUtils(context);  
  4.         }  
  5.         return dbUtils;  
  6.     }  
  7.   
  8.     //创建数据库以及升级相关代码  
  9.     public DatabaseUtils(Context context) {  
  10.         mContext = context;  
  11.         db = DbUtils.create(mContext, "data.db", curVersion, new DbUpgradeListener() {//curVersion:数据库版本,升级就是根据对比该字段决定要不要执行DbUpgradeListener  
  12.             @Override  
  13.             public void onUpgrade(DbUtils arg0, int arg1, int arg2) {  
  14.                 // TODO Auto-generated method stub  
  15.                 try {  
  16.                     if (arg1 == 1 && arg2 == 2) {//判断数据库版本从1到2,满足的话执行下面语句  
  17.                         String sql = "ALTER TABLE " + TableUtils.getTableName(SOSNumber.class)  
  18.                                 + " ADD COLUMN TEMP TEXT";  
  19.                         arg0.execNonQuery(sql);  
  20.                     }  
  21.                 } catch (DbException e) {  
  22.                     // TODO Auto-generated catch block  
  23.                     e.printStackTrace();  
  24.                 }  
  25.             }  
  26.         });  
  27.     }  

5.创建实体类(也就是定义一下即将要存储在数据库中的表结构),这里给出简单的例子:一个Company表

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. // 建议加上注解, 混淆后表名不受影响  
  2. @Table(name = "Company")  
  3. public class Company implements Serializable {  
  4.   
  5. <span style="white-space:pre">    </span>@Id // 如果主键没有命名名为id或_id的时,需要为主键添加此注解  
  6.     @NotNull  
  7.     //@NoAutoIncrement // int,long类型的id默认自增,不想使用自增时取消注释  
  8.     private int id;  
  9.       
  10.     @Column(column = "name")  
  11.     @NotNull  
  12.     private String name;  
  13.   
  14.     @Column(column = "phone")  
  15.     @NotNull  
  16.     private String phone;  
  17.   
  18.     public Company() {  
  19.     //此处很重要,增加了下面的带参构造函数,一定要写无参构造函数,否则该表会创建失败  
  20.     }  
  21.       
  22.     public Company(int id, String name, String phone) {  
[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1.                 this.id = id;  
  2.         this.name = name;  
  3.         this.phone = phone;  
  4.     }  
  5.   
  6.     public String getName() {  
  7.         return name;  
  8.     }  
  9.   
  10.     public void setName(String name) {  
  11.         this.name = name;  
  12.     }  
  13.   
  14.     public String getPhone() {  
  15.         return phone;  
  16.     }  
  17.   
  18.     public void setPhone(String phone) {  
  19.         this.phone = phone;  
  20.     }  
  21.   
  22.     @Override  
  23.     public String toString() {  
  24.         return "Company{"name='" + getName() + '\'' + ", phone='" + getPhone()+'}';  
  25.     }  
  26. }  

6.创建表

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. DatabaseUtils db = new DatabaseUtils(context);  
  2.   
  3. int id = 1;  
  4. String name = "XX有限公司";  
  5. String number = "0755-1234567";  
  6. Company  company = new Company(id, name, number);  
  7. //也可以使用下面这种方式  
  8. /* 
  9. Company  company = new Company(); 
  10. company.setId(id);//貌似在上面类里面少写了这个接口,大家将就下自己加上吧 
  11. company.setName(name); 
  12. company.setPhone(number); 
  13. */  
  14. //saveOrupdate的定义:public <T> void saveOrupdate(Class<T> entityType, Object id, Object entity, List<?> entities)  
  15. db.saveOrupdate(Company.class,id,company,null);   

7.很多时候需要使用外键关联表,这时候的表结构需要重新定义,字表代码如下(父表请参考上面):

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. // 建议加上注解, 混淆后表名不受影响  
  2. @Table(name = "CompanyInfo")  
  3. public class CompanyInfo extends EntityBase implements Serializable{  
  4.   
  5.     //只是举例,所以剩下字段还请自行添加  
  6.     @Foreign(column = "company_id", foreign = "id")//前面id为存在本表里面外键的字段名(company_id),后面id为对应父表主键字段名  
  7.     public Company parent;  
  8.       
  9.     @Column(column = "id")  
  10.     @NotNull  
  11.     private int Id;  
  12.       
  13.     @Column(column = "company_id")  
  14.     @NotNull  
  15.     private int companyId;  
  16.       
  17.     public CompanyInfo(){  
  18.           
  19.     }  
  20.       
  21.     public InsureCompanyInfo(Company parent, int parentid,int id) {  
  22.         this.parent = parent;  
  23.         this.companyId = parentid;  
  24.         this.Id = id;  
  25.     }  
  26.     //下面请自行添加一些get,set函数  
  27.       
  28.     @Override  
  29.     public String toString() {  
  30.         return "CompanyInfo{" +  
  31.                 "id=" + id + +  
  32.                 '}';  
  33.     }  
  34. }  


8.带外键的数据保存,代码如下:

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. int id = 2;  
  2. String name = "XX公司";  
  3. String phone = "0755-1234567";  
  4. Company cc = new InsureCompany(id,name,phone);  
  5. ArrayList<CompanyInfo> fieldList = new ArrayList<CompanyInfo>();  
  6. for (int i = 0;i<5;i++) {//这里示例性的写五条数据,暂时id用i来写了  
  7.     CompanyInfo ef = new CompanyInfo(cc, id, i);  
  8.     fieldList.add(ef);  
  9. }  
  10. db.saveOrupdate(Company.class, cc.getId(), cc, fieldList);  

9.数据查找跟删除,代码如下:

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. int id = 1;  
  2. Company cc = db.findFirst(Selector.from(Company.class).where("id""=", id));//查找第一个id=1的  
  3. Company cc1 = db.findById(Company.class,id);//如果id为主键不允许重复,那么这句跟上面那句作用一样  
  4. //此外还有:db.findAll(Selector);等接口,查找所有满足条件的数据;保存直接使用db.save()或者db.saveAll(),使用方式都是一样的,就不多写了  
  5. db.delete(CompanyInfo.class, WhereBuilder.b("company_id""=", cc.getId()));//删除CompanyInfo表中父表id = 1的  
  6. //db.deleteById(),db.deleteAll()等删除接口,同上使用方式  

差点忘记了,saveOrupdate接口是自己封装的,也放上来吧

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. public <T> void saveOrupdate(Class<T> entityType, Object id, Object entity, List<?> entities) {  
  2.         T tmp = findById(entityType, id);  
  3.         if (tmp == null) {  
  4.             if (entities != null && entities.size() != 0) {  
  5.                 saveBindingAll(entities);  
  6.             } else {  
  7.                 save(entity);  
  8.             }  
  9.         } else {  
  10.             update(entity);  
  11.             if(entities != null){  
  12.                 updateAll(entities);  
  13.             }             
  14.         }  
  15.     }  

1 0
原创粉丝点击