【转】afinal来操作android的数据库sqlite

今天给大家介绍下#afinal#来操作android的数据库sqlite。

#afinal#是一个android的orm、ioc快速开发框架,里面包含了四大功能:空间的id绑定和事件绑定功能;网络图片的显示功能(里面包含了强大的缓存框架);数据库sqlite的操作功能;http数据的读取功能(支持ajax方式读取);

#afinal#开源网址:https://github.com/yangfuhai/afinal

这篇文章主要是介绍afinal的功能之一FinalDb组件,其他组件请关注我的博客吧,以后将会一一介绍:

# afinal#的FinalDb组件是android的一个轻量级的orm框架,使用简单,一行代码就可以完成数据库的各种操作功能。

首先我们来创建一个测试实体类 User.java

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

package com.devchina.ormdemo;

import java.util.Date;

public class User {

    

    private int id;

    private String name;

    private String email;

    private Date registerDate;

    private Double money;

    

    /////////////getter and setter 不能省略哦///////////////

    public int getId() {

        return id;

    }

    public void setId(int id) {

        this.id = id;

    }

    public String getName() {

        return name;

    }

    public void setName(String name) {

        this.name = name;

    }

    public String getEmail() {

        return email;

    }

    public void setEmail(String email) {

        this.email = email;

    }

    public Date getRegisterDate() {

        return registerDate;

    }

    public void setRegisterDate(Date registerDate) {

        this.registerDate = registerDate;

    }

    public Double getMoney() {

        return money;

    }

    public void setMoney(Double money) {

        this.money = money;

    }

    

    

    

}

这个实体类要注意一点就是getter和setter是不能省略的哦,,,,因为afinal的finalDb最终会调用setter去给实体类的属性赋值。

现在实体类创建完毕了,我们来写我们的第一个demo:

AfinalOrmDemoActivity.java

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

package com.devchina.ormdemo;

import java.util.Date;

import java.util.List;

import net.tsz.afinal.FinalActivity;

import net.tsz.afinal.FinalDb;

import net.tsz.afinal.annotation.view.ViewInject;

import android.os.Bundle;

import android.util.Log;

import android.widget.TextView;

public class AfinalOrmDemoActivity extends FinalActivity {

    

    

    @ViewInject(id=R.id.textView) TextView textView; //这里使用了afinal的ioc功能,以后将会讲到

    

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        

        FinalDb db = FinalDb.create(this);

        

        User user = new User();

        user.setEmail("[email protected]");

        user.setName("探索者");

        user.setRegisterDate(new Date());

        

        db.save(user);

        

        List<User> userList = db.findAll(User.class);//查询所有的用户

        

        Log.e("AfinalOrmDemoActivity", "用户数量:"+ (userList!=null?userList.size():0));

        

        textView.setText(userList.get(0).getName()+":"+user.getRegisterDate());

    }

}

很简单吧,就一个FinalDb db = FinalDb.create(this),然后db.save(user);就可以把我们定义的实体类保存到数据库去啦。我们来看输出日志:

什么?就这样就保存到sqlite数据库里面去了?可是我们还没有创建数据库,也没有创建表呀?怎么可能?

这里,我要跟大家说的是afinal自己去创建啦,简单吧。

我们来看下adt的File Exploer 查看database目录,下面确实有一个afinal.db文件,如下图:

 我们把afinal.db导出来后,通过sqlite数据库打开afinal.db,如下图:

同时afinal自动给我们创建来表:com_devchina_ormdemo_User,由此看出afinal会以类名为表名自动创建表:我们再过来看下表的数据:

到这里,相信大家能明白了,原理afinal自动给我们创建了数据库afinal.db同时给我们创建了表com_devchina_ormdemo_User,保存的时候,afinal自动把数据保存到sqlite表里面去了。

这时候,估计大家的疑问又起来了

afinal自动创建了数据库afinal.db,同时自动创建了表com_devchina_ormdemo_User。可是,我们不想创建数据库afinal.db,也不想让我们的表示com_devchina_ormdemo_User,那我们应该怎么办呢?

这一些呀,afinal都已经想好了。

接下来,我们来介绍下afinal的orm注解功能。

第一个,配置数据库中的表名  net.tsz.afinal.annotation.sqlite.Table,我们来给user,java配置一下:

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

package com.devchina.ormdemo;

import java.util.Date;

import net.tsz.afinal.annotation.sqlite.Table;

@Table(name="user_test")

public class User {

    

    private int id;

    private String name;

    private String email;

    private Date registerDate;

    private Double money;

    

    /////////////getter and setter///////////////

    //代码太长,略getter setter,开发中不能省略

}

这里和上边唯一不同的是 多了一个注解 @Table(name="user_test"),只要我们配置了这个以后,我们再来看下afinal创建的数据库和表:

由此,我们可以看出来,afinal又自动给我们创建了表user_test,但是要注意的是com_devchina_ormdemo_User这个表afinal并没有去删除,所以这里也要提醒下大家,我们在重新设计了类的结构或者属性的时候,先手动删除掉直接的数据,否则就会有垃圾数据保存在数据库里面,当然,不删除也可以,不会有任何的影响。

在上面的讲述中,细心的朋友可能会注意到了一个问题,afinal自动把user的id的这个属性当做了主键。而且自动增长。

可是,可是在我们的开发过程中,我们的user可能没有id这个属性啊,可能是userId,或者又可能是其他我们喜欢的属性,那怎么办呢?

没有关系:afinal有给我们准备了另一个注解:net.tsz.afinal.annotation.sqlite.Id,通过这个,我们就可以给我们的实体类定义主键啦

afinal的主键机制是:

当给某个属性添加注解@id的时候,该属性就是主键(一个类中只有一个主键),保存在数据库中的列名为属性的名称,@Id(column="userId")给属性添加注解的时候,保存在数据库的列名是userId,当这个属性没有的时候,afinal自动回去该类查找_id属性,_id属性也没有的时候,afinal就会自动去查找id属性。如果连id属性也没有,那么afinal就报错啦,afinal的orm规则中,表示必须有主键的,而且只能有一个(目前暂时不支持复合主键)。

回到刚才的问题,afinal给我们自动创建数据库afinal.db,可是,我们不想创建让数据库名是afinal.db,那怎么办呢?

afinal的创建时候有多个方法的重载。

在create的方法中,

isDebug表示是否是debug模式,debug模式中,使用afinal操作数据库的时候就会答应SQL语句的log,

dbName就是数据库的名称啦。

所以这里,我们传入我们自己想要的数据库名称就行了。

其实afinal的FinalDb模块中,还有很多其他的功能,比如一对多,多对一的配置和注解等等。等待大家挖掘了。

afinal的orm注解中有:

Id------->注解注解

Property------>属性注解

Table------->数据表注解

ManyToOne-------->多对一注解

OneToMany--------->一对多注解

Transient------->忽略属性注解(如果该属性添加这个注解,afinal的orm功能将忽略该属性)

源代下载地址:

http://download.csdn.net/detail/michael_yy/4740088

里面没有jar包,自己去afinal的广发网站下载最新jar包

时间: 2024-10-17 08:39:52

【转】afinal来操作android的数据库sqlite的相关文章

Android - 插入数据库(SQLite)错误

插入数据库(SQLite)错误 本文地址: http://blog.csdn.net/caroline_wendy Error: android.database.sqlite.SQLiteException: no such table: step (code 1): ,  while compiling: INSERT INTO step(duration,date,counter) VALUES (?,?,?). 错误:插入数据库错误,没有找到表,插入表的地方写入参数,而参数地方传入空值.

android 建数据库 SQLite 存储sd 卡或者内存

android 创建数据库调用SQLiteOpenHelper,一般不直接操作SQLiteDatabase . 是通过SQLiteOpenHelper来获取 public class DBOpenHelper extends SQLiteOpenHelper { private static final int VERSION = 1;// 定义数据库版本 private static final String PATH = Environment .getExternalStorageDire

Android中数据库Sqlite的性能优化

1.索引简单的说,索引就像书本的目录,目录可以快速找到所在页数,数据库中索引可以帮助快速找到数据,而不用全表扫描,合适的索引可以大大提高数据库查询的效率.(1). 优点大大加快了数据库检索的速度,包括对单表查询.连表查询.分组查询.排序查询.经常是一到两个数量级的性能提升,且随着数据数量级增长. (2). 缺点索引的创建和维护存在消耗,索引会占用物理空间,且随着数据量的增加而增加.在对数据库进行增删改时需要维护索引,所以会对增删改的性能存在影响. (3). 分类a. 直接创建索引和间接创建索引直

android学习——数据库SQLite的基本操作

 如果想要在android中使用数据库,使用SQLite是一个非常好的选择,因为它是android内置的数据库,提供了很多支持. 数据库的使用无非就是CRUD,也就是"Create,Read,Update,Delete"这四个基本操作. 一.Create Create就是创建表,而要想创建表,首先必须要创建或者打开数据库. 有两种方式可以做到这点: 1.手动创建或者打开数据库 SQLiteDatabase database = openOrCreateDatabase("St

android之数据库SQLite(一)

创建数据库 首先定义SQLiteOpenHelper的子类 代码如下: package com.example.myandroid; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class MyDatabaseHelper extends SQLiteOpenHelper{

android 本地数据库sqlite的封装

单机android   sqlite数据库的实现,这个数据库可与程序一起生成在安装包中 一.下载sqlite3.exe文件 二.运行 cmd 转到sqlite3.exe 所在目录  运行 sqlite3.exe 数据库名.db     然后会出现sqlite>的命令提示符 输入创建表的语句, create table 表名('列','列'...):(注意: 要在结束部分加  分号 )     此时会在sqlite3.exe 所在目录,出现所建数据库的文件 三.如果想在Android中运行的话,需

Android获取数据库sqlite文件方法的命令(亲测无root手机上可行)

run-as com.example.railsetmonisysapp.app cat /data/data/com.example.railsetmonisysapp.app/databases/rail.db > /storage/sdcard0/Download/a.db run-as 程序的包名 cat /data/data/程序的包名/databases/数据库名称.db>取出后存放的位置

使用android快速开发框架afinal的FinalDb操作android数据库

原文地址:http://my.oschina.net/yangfuhai/blog/87459 今天给大家介绍下#afinal#来操作android的数据库sqlite. #afinal#是一个android的orm.ioc快速开发框架,里面包含了四大功能:空间的id绑定和事件绑定功能:网络图片的显示功能(里面包含了强大的缓存框架):数据库sqlite的操作功能:http数据的读取功能(支持ajax方式读取): #afinal#开源网址:https://github.com/yangfuhai/

IT观察】网络通信、图片显示、数据库操作……Android程序员如何利用开源框架

每个Android 程序员都不是Android应用开发之路上孤军奋战的一个人,GitHub上浩如烟海的开源框架或类库就是前人为我们发明的轮子,有的轮子能提高软件性能,而有的轮子似乎是以牺牲性能为代价换取编程速度.擅长利用轮子的程序员已经遥遥领先,不擅长利用轮子的程序员总是嫌前人发明的轮子不够圆,自己造个方轮子上路后才发现落后了. 作者:玖哥来源:51CTO|2017-10-19 16:06 移动端 收藏 分享 [51CTO.com原创稿件]每个Android 程序员都不是Android应用开发之