美文网首页Android技术知识Android开发程序员
数据库利器 LitePal2.0使用介绍

数据库利器 LitePal2.0使用介绍

作者: MrHorse1992 | 来源:发表于2018-06-13 09:43 被阅读206次

    1 前言

    LitePal是郭神开发的一款安卓数据库操作的开源库。Litepal可以帮助开发者无需编写SQL语句即可完成数据库的增删改查。郭神最近更新了LitePal至2.0版本。具体使用过程如下:

    2 添加库

    Eclipse 只能去下载jar包的方式
    Android Studio在build.gradle中添加依赖库

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

    3 配置litepal.xml文件

    在工程assets目录下创建litepal.xml文件,注意litepal.xml需要创建在assets目录下,不要创建在values文件夹下。创建完成后编辑litepal.xml文件。

    <?xml version="1.0" encoding="utf-8"?>
    <litepal>
        <!--创建数据库名称,默认在末尾添加.db扩展名 -->
        <dbname value="demo" />
    
        <!--数据库版本号,用于更新数据库-->
        <version value="1" />
    
        <!--
            将定义的数据实体类映射到数据表中
            例如有实体类Reader和Magazine,则映射方式如下:    
            <list>
                <mapping class="com.test.model.Reader" />
                <mapping class="com.test.model.Magazine" />
            </list>
        -->
        <list>
        </list>
        
        <!--
           数据库文件存储路径,建议默认
            <storage value="external" />
        -->
        
    </litepal>
    

    4 配置Application

    使用LitePal时需要配置Application,配置方式有两种
    (1) 若你的应用程序没有重继承Application类则在AndroidManifest.xml中添加

    <manifest>
        <application
            android:name="org.litepal.LitePalApplication"
            ...
        >
            ...
        </application>
    </manifest>
    

    (2) 若重新继承Application类则可以使用以下代码:

    public class YourOwnApplication extends Application {
    
        @Override
        public void onCreate() {
            super.onCreate();
            LitePal.initialize(this);
        }
        ...
    }
    

    5 创建数据对象

    2.0版本数据类将继承LitePalSupport类,不再是之前的DataSupport类。

    public class Album extends LitePalSupport {
        
        @Column(unique = true, defaultValue = "unknown")
        private String name;
        
        private float price;
        
        private byte[] cover;
        
        private List<Song> songs = new ArrayList<Song>();
    
        // generated getters and setters.
        ...
    }
    
    public class Song extends LitePalSupport {
        
        @Column(nullable = false)
        private String name;
        
        private int duration;
        
        @Column(ignore = true)
        private String uselessField;
        
        private Album album;
    
        // generated getters and setters.
        ...
    }
    

    若有上述两个数据实体类则需要修改litepal.xml,list中添加

    <list>
        <mapping class="org.litepal.litepalsample.model.Album" />
        <mapping class="org.litepal.litepalsample.model.Song" />
    </list>
    

    通过以上配置,数据库以及数据表将在首次操作数据库时创建。

    6 更新数据库

    修改数据类

    public class Album extends LitePalSupport {
        
        @Column(unique = true, defaultValue = "unknown")
        private String name;
        
        @Column(ignore = true)
        private float price;
        
        private byte[] cover;
        
        private Date releaseDate;
        
        private List<Song> songs = new ArrayList<Song>();
    
        // generated getters and setters.
        ...
    }
    

    在litepal.xml中修改<version>标签为对应的数据库版本。数据表将会在下一次操作数据库时自动更新。

    7 保存数据

    数据的保存只需调用save()方法即可,简单方便。
    例如:

    Album album = new Album();
    album.setName("album");
    album.setPrice(10.99f);
    album.setCover(getCoverImageBytes());
    album.save();
    Song song1 = new Song();
    song1.setName("song1");
    song1.setDuration(320);
    song1.setAlbum(album);
    song1.save();
    Song song2 = new Song();
    song2.setName("song2");
    song2.setDuration(356);
    song2.setAlbum(album);
    song2.save();
    

    8 查询数据

    (1) 通过指定id查询

    Song song = LitePal.find(Song.class, id);
    

    (2) 查询全部数据

    List<Song> allSongs = LitePal.findAll(Song.class);
    

    (3) 条件查询

    List<Song> songs = LitePal.where("name like ? and duration < ?", "song%", "200").order("duration").find(Song.class);
    

    9 更新数据

    (1) 通过find方法查找到该对象,更新对象值,然后在保存。
    例如:

    Album albumToUpdate = LitePal.find(Album.class, 1);
    albumToUpdate.setPrice(20.99f); // raise the price
    albumToUpdate.save();
    

    (2) 使用update()或者updateAll()方法。

    //更新指定id的数据
    Album albumToUpdate = new Album();
    albumToUpdate.setPrice(20.99f); // raise the price
    albumToUpdate.update(id);
    //更新全部数据
    Album albumToUpdate = new Album();
    albumToUpdate.setPrice(20.99f); // raise the price
    albumToUpdate.updateAll("name = ?", "album");
    

    10 删除数据

    调用delete()或者deleteAll()方法删除数据

    LitePal.delete(Song.class, id);
    LitePal.deleteAll(Song.class, "duration > ?" , "350");
    

    11 异步操作

    LitePal支持异步操作,防止主线程耗时。具体使用方式如下:
    (1) 异步查询

    LitePal.findAllAsync(Song.class).listen(new FindMultiCallback() {
        @Override
        public <T> void onFinish(List<T> t) {
            List<Song> allSongs = (List<Song>) t;
        }
    });
    

    (2) 异步保存

    Album album = new Album();
    album.setName("album");
    album.setPrice(10.99f);
    album.setCover(getCoverImageBytes());
    album.saveAsync().listen(new SaveCallback() {
        @Override
        public void onFinish(boolean success) {
    
        }
    });
    

    其他方式类似,只是在添加Async后缀并且回调onFinish方法。

    12 多数据库

    如果程序需要多个数据库可以使用以下方法创建:

    //创建demo2.db数据库,同时创建singer,album,song表
    LitePalDB litePalDB = new LitePalDB("demo2", 1);
    litePalDB.addClassName(Singer.class.getName());
    litePalDB.addClassName(Album.class.getName());
    litePalDB.addClassName(Song.class.getName());
    LitePal.use(litePalDB);
    

    13 删除数据库

    LitePal.deleteDatabase("demo2");
    

    14 膜拜一波

    LitePal简化了数据库操作,避免写SQL语句,是数据库开发一大利器。

    相关文章

      网友评论

        本文标题:数据库利器 LitePal2.0使用介绍

        本文链接:https://www.haomeiwen.com/subject/zehreftx.html