Android数据库(SQLite)框架(8)—— 总结

介绍

Litepal是一个轻型的数据库操作框架,运用ORM对象映射模型,所有的数据库操作都通过对象直接进行操作,可以大大简化数据的存储与维护过程。项目地址,传送门。


litepal导入

1.添加依赖

eclipse开发环境:首先下载jar,建议下载最新版本的,然后放入你新建工程的libs中
AndroidStudio开发环境:修改你新建工程的build.gradle,增加一个新的依赖库,如下:

dependencies {
    compile 'org.litepal.android:core:1.3.2'
}

2.在assets中创建litepal.xml

注意在Android studio中要一定要新建一个assets文件夹,然后在里面创建名为litepal的xml文件,如果litepal.xml新建在res/raw中,则会无法识别。

Android数据库(SQLite)框架(8)—— 总结_第1张图片


<litepal>
    
    <dbname value="userinf" >dbname>

    
    <version value="1" >version>

    
    <list> list>

    

litepal>

3.配置Litepal.初始化litepal

由于操作数据库时需要用到Context,而我们显然不希望在每个接口中都去传一遍这个参数,那样操作数据库就显得太繁琐了。因此,LitePal使用了一个方法来简化掉Context这个参数,只需要在AndroidManifest.xml中配置一下LitePalApplication,所有的数据库操作就都不用再传Context了,如下所示:

  
    "org.litepal.LitePalApplication"  
        ...  
    >  
    ...  
      
  

当然,有些程序可能会有自己的Application,并在这里配置过了。比如说有一个MyApplication,如下所示:

  
    "com.example.MyApplication"  
        ...  
    >  
    ...  
      
  

没有关系,这时只需要修改一下MyApplication的继承结构,让它不要直接继承Application类,而是继承LitePalApplication类,就可以使用一切都能正常工作了,代码如下所示:

public class MyApplication extends LitePalApplication {  
    ...  
}  

但是,有些程序可能会遇到一些更加极端的情况,比如说MyApplication需要继承另外一个AnotherApplication,并且这个AnotherApplication还是在jar包当中的,不能修改它的代码。这种情况应该算是比较少见了,但是如果你遇到了的话也不用急,仍然是有解释方案的。你可以把LitePal的源码下载下来,然后把src目录下的所有代码直接拷贝到你项目的src目录下面,接着打开LitePalApplication类,将它的继承结构改成继承自AnotherApplication,再让MyApplication继承自LitePalApplication,这样所有的Application就都可以在一起正常工作了。

仅仅三步,我们就将所有的配置工作全部完成了,并且这是一件一本万利的事情,自此以后,你就可以开心地体验LitePal提供的各种便利了,就让我们从建表开始吧。


实体类创建

public class User extends DataSupport {

    private int userId;
    private String loginName;
    private String loginPassword;
    private int role;
    private int createId;
    private Date createTime;
    private int updId;
    private Date updTime;

    //记得添加所有字段的getter和setter方法

}

litepal支持的实体类字段映射类型为

int,long,double,float,byte[],boolean,String,Date;

注意不支持String[]数组型。

实体类出现名为id的字段

假如设置实体类的一个字段为id,类型是字符型,会报错么?

private String id;

运行之后报了如下异常

org.litepal.exceptions.DataSupportException: id type is not supported. Only int or long is acceptable for id

com.example.hapzhu.andrioddemotest W/System.err:     at org.litepal.crud.DataSupport.saveThrows(DataSupport.java:1870)
com.example.hapzhu.andrioddemotest W/System.err:     at org.litepal.crud.DataSupport.save(DataSupport.java:1802)

意思是如果字段名为id,类型只能为int或者long。

生成的数据库表结构

Android数据库(SQLite)框架(8)—— 总结_第2张图片


数据库增删改查操作

1.存储操作

User user = new User();

user.setUserId(8);
user.setLoginName("admin");

//判断数据库是否存在该条记录,不存在则插入
if (user.saveIfNotExist("userId = ? ", "8")) {
    Toast.makeText(this, "存储成功", Toast.LENGTH_SHORT).show();
} else {
    Toast.makeText(this, "存储失败", Toast.LENGTH_SHORT).show();
}

2.删除记录

//删除数据库中User表的所有记录
DataSupport.deleteAll(User.class);

//删除数据库User表中id为1的记录
User user =  DataSupport.find(User.class,1);
     if(user.isSaved()){
         if(user.delete(User.class,1) > 0 ){
             showToast("删除成功");//自己封装的方法
         }else{
             showToast("删除失败");
         };

//删除数据库user表中id大于1的记录
DataSupport.deleteAll(User.class, "id> ?" , "1");

3.修改记录

方法一

//第一步,查找id为1的记录
User user = DataSupport.find(User.class, 1);
//第二步,改变某个字段的值
user.setUserId(10);
//第三步,保存数据
user.save();

方法二

User user = new User();
user.setLoginName("admin");
//直接更新id为1的记录
user.update(1);

方法三

User user = new User();
user.setLoginName("admin");
//更新userid为1的记录,将loginName字段设为admin
movie.updateAll("userid = ?", "1");

4.查询记录

//查找movie表的所有记录
List allMovies = DataSupport.findAll(Movie.class);

//查找movie表id为1的记录
Movie movie = DataSupport.find(Movie.class,1);

更多具体详见 http://blog.csdn.net/qq_38414907/article/details/76257249

5.异步操作

异步操作适用于数据量特别大的操作,可能需要比较久的时间去操作数据库,这时就可以用子线程来完成数据库操作。
注意这是1.5.1之后才添加的方法,所有增删改查都可以用异步操作,只需在方法名后拼接上async这个关键词即可。

//异步查询所有电影数据
DataSupport.findAllAsync(User.class).listen(new FindMultiCallback() {
    @Override
    public  void onFinish(List t) {
        List allUsers= (List) t;
    }
});

//异步保存数据至数据库

user.saveAsync().listen(new SaveCallback() {
    @Override
    public void onFinish(boolean success) {

    }
});

建立表关联

原理就是在实体类中添加其它类的对象,其实就是这表中添加了一个外表的主键,这样就把它们给关联起来了。

更多具体详见 http://blog.csdn.net/qq_38414907/article/details/76230444

你可能感兴趣的:(android数据存储)