安卓ORM框架之activeandroid

安卓ORM框架之activeandroid

最近由于项目需要,需要用到手机本地数据库,本来打算自己实现SQLiteOpenHelper来自己写,但后来被sql语句打败。我就搜索了下关于数据库框架,便找到了activeandroid,自己学习了下,感觉不错。该框架使用简单方便,易操作,而且该创建的表的bean跟一般使用的bean对象没有太大差别,几乎看不到SQL语句,对SQL语句比较薄弱的开发人员,开发帮助比较大。于是小弟不敢独享,简单的写了一个demo特来分享,望有什么理解错误的地方,还往大神多多指点。

jar包的下载地址:https://github.com/pardom/ActiveAndroid

1.配置数据库

把jar包导入到/libs目录下,在/AndroidManifest.xml文件下的application标签下配置数据库的名称和版本号:

    <meta-data
            android:name="AA_DB_NAME"
            android:value="subscridera.db" />
        <meta-data
            android:name="AA_DB_VERSION"
            android:value="1" />

注意:当表结构有修改时一定记得要升级数据库的版本号。

2.对数据库进行一个绑定

在你的MyApplication中做如下操作(一定要记得把你的MyApplication 在AndroidManifest.xml下声明):

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        // 绑定数据库
        ActiveAndroid.initialize(this);
    }

}

注意:一定记得在配置文件下声明该MyApplication.

3.创建数据表

以bean对象的加注解的格式,创建出表和表的字段
@Table(name = “subscr”):是你要创建表的名字
@Column(name = “tid”):是你要创建的字段的名字也可做表关联,另外一个表设置为该表的一个字段即可。

import java.io.Serializable;
import com.activeandroid.Model;
import com.activeandroid.annotation.Column;
import com.activeandroid.annotation.Table;

//创建的表名
@Table(name="subscr")
public class Subscriber extends Model implements Serializable{

    //无产构造,一定要写
    public Subscriber() {
        super();
    }
    //表字段
    @Column(name="name")
    private String name;

    @Column(name="age")
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Subscriber [name=" + name + ", age=" + age + "]";
    }

}

注意:无参构造一定要写,不然有可能会报错

4.查看数据库是否创建成功:

上面几部完成后,数据库以及数据表和字段应该就创建好了。你可以去/data/data/该项目的包名/databases目录下找到该数据库,导出查看是否成功创建(模拟器是可以直接访问该目录的,真机需要root权限)。如果没有成功请在检查上面几部是否有什么遗漏或是配置出错的地方。

5.上面几部完成,数据库已经创建好了,让咱对其进行操作吧。

import java.util.List;
import com.activeandroid.query.Select;
import android.os.Bundle;
import android.app.Activity;

public class MainActivity extends Activity {

    private Subscriber sub;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initAdd();
        initquery();
        initReplace();
        //initDelet();
    }

    /**
     * 添加
     *  创建bean对象,添加数据,
     *  然后使用save把数据添加到数据库中
     */
    private void initAdd() {

        for (int i = 0; i < 5; i++) {
            sub = new Subscriber();
            sub.setName("name" + i);
            sub.setAge(i + 10);
            sub.save();
        }

    }

    /**
     * 删除
     *  先查询所有然后一条一条删除
     *  或是按查找出来的结果进行删除
     *  批处理不知道该怎么搞,
     *  有知道的大神告诉下,O(∩_∩)O谢谢
     */
    private void initDelet() {
        // 先查询在通过遍历删除,批处理不知道怎么搞要,删除某条同理,查询出来,删除掉
        List<Subscriber> list4 = new Select().from(Subscriber.class).execute();

        for (int i = 0; i < list4.size(); i++) {
            list4.get(i).delete();
        }

    }

    /**
     * 查询
     *  可以查询所有,查询的结果是一个集合
     *  也可以按条件查询
     */
    private void initquery() {
        // 查询所有,得到一个结果集合
        List<Subscriber> list1 = new Select().from(Subscriber.class).execute();
        ergodic(list1, "list1");
        // 条件查询
        List<Subscriber> list2 = new Select().from(Subscriber.class)
                .where("age=?", "12").execute();
        ergodic(list2, "list2");

    }

    /**
     * 替换 先查询出要替换的对象,然后进行替换 
     * 如果要操作的行存在那么save操作就是替换了。
     */
    private void initReplace() {
        List<Subscriber> list3 = new Select().from(Subscriber.class)
                .where("age=?", "12").execute();
        for (int i = 0; i < list3.size(); i++) {
            list3.get(i).setAge(100);
            list3.get(i).save();
        }

    }

    // 遍历输出
    private void ergodic(List<Subscriber> list, String str) {

        for (int i = 0; i < list.size(); i++) {
            System.out.println(str + "_" + i + ":" + list.get(i).toString());
        }
    }
}

补充:

该创建的表的bean跟一般使用的bean对象没有太大差别;但是要注意的是,如果你是如果你是使用Gson来解析数据的话,查询得到的集合,在转为json字符串时,会报错:“java.lang.UnsupportedOperationException: Attempted to serialize java.lang.Class: [your model]. Forgot to register a type adapter?”,这是由于ActiveAndroid框架需要模型继承com.activeandroid.Model类,而这个类貌似不能序列化,你需要让bean类实现Serializable序列化接口,并创建序列化器,在Gson解析的时候,Gson gson=new GsonBuilder().setExclusionStrategies(new SpecificClassExclusionStrate(null,com.activeandroid.Model.class)).create();然后在进行解析转换为json字符串。
关于该Gson问题详情可以查看:http://www.cnblogs.com/i0air/p/3723474.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值