ActiveAndroid (二):如何进行增删改查

上一篇在这:Github开源框架:ActiveAndroid (一)

创建我们自己的数据库模型

创建我们自己的数据库模型是很简单的,只要创建一个有注释域的类,并把它命名为我们要用的名字就可以了。但是有两件事情我们必须要注意:一、你的类必须是Model类的子类,并且使用@Column进行注释。ActiveAndroid 会处理类内的基本数据类型以及和其他表间的关系或者是日期类。二、ActiveAndroid 会在你的表中自动创建一个ID字段。这个字段会自动地递增。

ActiveAndroid将使用类内标准的构造函数去实例化对象。如果你定义了自己的构造函数,你必须再定义一个无参构造函数。源码中有注释能帮助你完成这项工作。

@Table(name = "Items")
public class Item extends Model {
        // If name is omitted, then the field name is used.
        @Column(name = "Name")
        public String name;

        @Column(name = "Category")
        public Category category;

        public Item() {
                super();
        }

        public Item(String name, Category category) {
                super();
                this.name = name;
                this.category = category;
        }
}

在前面的叙述中,我们使用了Categories和Items来作为例子。其中Items是Categories里的其中一个,Categories里包含许多Items。那么我们在ActiveAndroid里要如何表示这两者的关系呢?在Items类里,我们可以通过直接创建一个Category类对象,使两者有一个直接的关系。

@Table(name = "Items")
public class Item extends Model {

    @Column(name = "Name")
    public String name;

    @Column(name = "Category")
    public Category category;
}

同样,Categories类可以表明它与许多项目的关系。我们这样做是因为有一个helper的方法。

@Table(name = "Categories")
public class Category extends Model {
    @Column(name = "Name")
    public String name;

        // This method is optional, does not affect the foreign key creation.
    public List<Item> items() {
        return getMany(Item.class, "Category");
    }
}

此外,你可以通过在列定义的注释中通过设置index = true对特定的列设置索引。这样会在两列中都创建一个表:

    @Column(name = "Name", index = true)
    public String name;

    @Column(name = "Category", index = true)
    public String category;

接下来讲一讲怎么加快程序的启动吧:

ActiveAndroid会翻阅你的所有文件去找到你的Model类。这个过程可能会很慢,如果你有许多的依赖库。为了加快这一进程,你可以在AndroidManifest.xml中显式地指定你的Model类:

<meta-data
    android:name="AA_MODELS"
    android:value="com.myapp.model.Item, com.myapp.model.Category" />

最后,ActiveAndroid有一些列名是不可以用的,大家使用的时候最好注意一下:

ABORT               DEFAULT         INNER         REGEXP
ACTION              DEFERRABLE      INSERT        REINDEX
ADD                 DEFERRED        INSTEAD       RELEASE
AFTER               DELETE          INTERSECT     RENAME
ALL                 DESC            INTO          REPLACE
ALTER               DETACH          IS            RESTRICT
ANALYZE             DISTINCT        ISNULL        RIGHT
AND                 DROP            JOIN          ROLLBACK
AS                  EACH            KEY           ROW
ASC                 ELSE            LEFT          SAVEPOINT
ATTACH              END             LIKE          SELECT
AUTOINCREMENT       ESCAPE          LIMIT         SET
BEFORE              EXCEPT          MATCH         TABLE
BEGIN               EXCLUSIVE       NATURAL       TEMP
BETWEEN             EXISTS          NO            TEMPORARY
BY                  EXPLAIN         NOT           THEN
CASCADE             FAIL            NOTNULL       TO
CASE                FOR             NULL          TRANSACTION
CAST                FOREIGN         OF            TRIGGER
CHECK               FROM            OFFSET        UNION
COLLATE             FULL            ON            UNIQUE
COLUMN              GLOB            OR            UPDATE
COMMIT              GROUP           ORDER         USING
CONFLICT            HAVING          OUTER         VACUUM
CONSTRAINT          IF              PLAN          VALUES
CREATE              IGNORE          PRAGMA        VIEW
CROSS               IMMEDIATE       PRIMARY       VIRTUAL
CURRENT_DATE        IN              QUERY         WHEN
CURRENT_TIME        INDEX           RAISE         WHERE
CURRENT_TIMESTAMP   INDEXED         RECURSIVE     WITH
DATABASE            INITIALLY       REFERENCES    WITHOUT
对数据库进行增删改查操作

相信你现在你已经建立好你的数据库了,那现在就让我们学习一下怎么对数据库的数据进行增删改查的操作吧~

改&增:

要更新数据,只需要创建一个ActiveAndroid Model类的新实例,并将值分配给它的域,调用save()方法,就可以啦。保存方法同样适用于插入和更新记录。下面是一个例子:

Category restaurants = new Category();
restaurants.name = "Restaurants";
restaurants.save();

我们再创建一个Item数据,并将它归类到一个目录里:

Item item = new Item();
item.category = restaurants;
item.name = "Outback Steakhouse";
item.save();

或者再添加更多的Item:

item = new Item();
item.category = restaurants;
item.name = "Red Robin";
item.save();

item = new Item();
item.category = restaurants;
item.name = "Olive Garden";
item.save();

接下来给大家讲一下批量插入:

为了要同时插入大量数据,你可以使用transactions。通过调用transactions里的方法能够将整个效率提高100倍左右,下面是一个例子:

ActiveAndroid.beginTransaction();
try {
        for (int i = 0; i < 100; i++) {
            Item item = new Item();
            item.name = "Example " + i;
            item.save();
        }
        ActiveAndroid.setTransactionSuccessful();
}
finally {
        ActiveAndroid.endTransaction();
}

在示例中,使用transactions完成上面操作只需要4ms左右,如果我们不使用transactions的话则大概需要4s。

删:

要删除一个Item数据的话只要调用delete()就可以了

Item item = Item.load(Item.class, 1);
item.delete();

或者你可以静态删除它:

Item.delete(Item.class, 1);

或者你也可以用查询语句进行删除:

new Delete().from(Item.class).where("Id = ?", 1).execute();

查:

在ActiveAndroid里所有的查询操作都是使用查询语句或者是Model.query()方法,我们来看一看查询操作吧,这是到目前位置我们已经完成的:

@Table(name = "Items")
public class Item extends Model {
    @Column(name = "Name")
    public String name;

    @Column(name = "Category")
    public Category category;
}

如果你是随机选一个Item去完成这次查询操作的话效果会更好一些:

public static Item getRandom() {
    return new Select().from(Item.class).orderBy("RANDOM()").executeSingle();
}

在ActiveAndroid里进行查询操作就像在SQL里进行查询一样,我们创建了一个新的select对象,不断在Item里面找我们要的对象。然后调用OrderBy,通过“随机”。去查询一个调用了execute()的表,或在这种情况下executesingle()。如果我们只想在一个确定的Category里获得items,则通过在我们类中的参数字符串。方法是这样的:

public static Item getRandom(Category category) {
    return new Select()
        .from(Item.class)
        .where("Category = ?", category.getId())
        .orderBy("RANDOM()")
        .executeSingle();
}

这是我们如何得到一个类的所有项目,按名称排序。

public static List<Item> getAll(Category category) {
    return new Select()
        .from(Item.class)
        .where("Category = ?", category.getId())
        .orderBy("Name ASC")
        .execute();
}
时间: 2024-11-08 16:15:38

ActiveAndroid (二):如何进行增删改查的相关文章

MyBatis之二:简单增删改查

这一篇在上一篇的基础上简单讲解如何进行增删改查操作. 一.在mybatis的配置文件conf.xml中注册xml与注解映射 <!-- 注册映射文件 --> <mappers> <!-- 通过xml方式映射 --> <mapper resource="com/mybatis/crud/userMapper.xml" /> <!-- 通过注解方式映射 --> <mapper class="com.mybatis.c

MVC3+EF4.1学习系列(二)-------基础的增删改查和持久对象的生命周期变化

上篇文章中 我们已经创建了EF4.1基于code first的例子  有了数据库 并初始化了一些数据  今天这里写基础的增删改查和持久对象的生命周期变化 学习下原文先把运行好的原图贴来上~~ 一.创建详细页 首先 我们先在控制器下 添加详细页的方法 因为这篇文章后面要介绍持久对象声明周期的变化 所以在这里先看下有哪些状态 EF里一共有这五中生命状态类型 其实 看名字我们可以大概猜测出个一二三来~~  游离的 未改变的  新添加的  已删除的 修改的  但是是怎么变化的能 我们在后面的代码中实践与

基于MVC和Bootstrap的权限框架解决方案 二.添加增删改查按钮

上一期我们已经搭建了框架并且加入了列表的显示, 本期我们来加入增删改查按钮 整体效果如下 HTML部分,在HTML中找到中意的按钮按查看元素,复制HTML代码放入工程中 <a class="btn btn-small element" data-original-title="新增" href="/Customer/Add" data-toggle="tooltip" data-placement="top&q

小白5分钟上手c#数据库操作(二) 基础的增删改查

上一小节,我们已经准备好了一个数据库文件,现在我们先不用微软包装好的各种Entity Framework, 自己用基础的方法对数据库进行增删改查. 前期准备: 新建一个console工程,把上一小节的数据库拷贝到工程目录下,copy local 设置成true, 目录结构大致长这样: 然后添加一个nuget包,方面后面使用各种c#提供的方法: 基本上常用的操作里,查数据是一类,增删改是一类 先看怎么查数据: // 查询数据 using (var connection = new SQLiteCo

SQLite的使用(二):数据增删改查

SQLiteDatabase 用来管理SQLite数据库的类.SQLiteDatabase新增.修改.删除和查询数据库数据的方法,还可以执行其他常见的数据库管理任务. 方法 描述 (void) execSQL(String sql) 执行一个SQL语句的方法 (long) insert(String table,String nullColumnHack,ContentValues values) 添加数据行的方法 (int) update(String table, ContentValues

robot framework 数据库增删改查

使用rf做数据库的增删改查操作可以定义关键字,方便后续使用 关键字如下: 一.sql_查 1 [Arguments] ${host} ${port} ${user} ${passwd} ${db} ${sql} 2 Connect To Database Using Custom Params pymysql host='${host}', port=${port}, user='${user}', passwd='${passwd}', db='${db}',charset='utf8' 3

搭建第一个web项目:实现用户的增删改查(二)

最近学了点java和微信的东西,公司这个项目有搭建不起来,在公司有时间的时候就学点Android了,放了个端午假期又颓废了一段时间,这个增删改还没有整理好,我勒个去啊. 不过最近慢慢整理项目的时候,发现了一些思路,对以后和像我一样的新手来说也许有不少的帮助. 1.不要一味心思的去赶紧实现自己的想法,其实一步一步,从简单的来,慢慢测试,也许更节约时间. 这次就是急着去扩展easyUI的dialog,模仿公司的扩展方法,可是一直不成功.反而先做一个简单的dialog,慢慢一步步调试,就会发现自己犯的

Android中使用Sqlite数据库 (二) 增删改查

定义接口 package com.example.android_db.service; import java.util.List; import java.util.Map; public interface PersonService { public boolean addPerson(Object[] params); public boolean deletePerson(Object[] params); public boolean updatePerson(Object[] p

MyBatis学习(二)、SQL语句映射文件(2)增删改查、参数、缓存

二.SQL语句映射文件(2)增删改查.参数.缓存 2.2 select 一个select 元素非常简单.例如: Xml代码   <!-- 查询学生,根据id --> <select id="getStudent" parameterType="String" resultMap="studentResultMap"> SELECT ST.STUDENT_ID, ST.STUDENT_NAME, ST.STUDENT_SEX