Android 简单使用数据库框架litepal

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_41659081/article/details/102553104

1.引入litepal的jar包

引入jar包或者远程依赖都可以,我这里是下载的jar包,litepal的github地址

2.新建litepal.xml文件

新建assets目录如下图:

在assets目录下新建litepal.xml文件

<?xml version="1.0" encoding="utf-8"?>
<litepal>
    <dbname value="demo" ></dbname>

    <version value="1" ></version>

    <list>
        <mapping class="com.dk.litepal_new.model.Album"/>
        <mapping class="com.dk.litepal_new.model.Song"/>
    </list>
</litepal>

其中dbname是数据库名称,version是数据库版本,list中放的是模型类

3.在Application中初始化litepal

public class MyApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        LitePal.initialize(this);//初始化litepal
    }
    
}

4.建表Album和Song

模型类Album

public class Album extends LitePalSupport {

    @Column(unique = true,defaultValue = "unknow")
    private String name;

    private float price;

    private byte[] cover;

    private Date releaseDate;

    private List<Song> songs = new ArrayList<>();//此处用来形成和song一对多的关系

    public String getName() {
        return name;
    }

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

    public float getPrice() {
        return price;
    }

    public void setPrice(float price) {
        this.price = price;
    }

    public byte[] getCover() {
        return cover;
    }

    public void setCover(byte[] cover) {
        this.cover = cover;
    }

    public List<Song> getSongs() {
        return songs;
    }

    public void setSongs(List<Song> songs) {
        this.songs = songs;
    }

    public Date getReleaseDate() {
        return releaseDate;
    }

    public void setReleaseDate(Date releaseDate) {
        this.releaseDate = releaseDate;
    }
}

模型类Song

public class Song extends LitePalSupport {

    @Column(nullable = false)
    private String name;

    private int duration;

    @Column(ignore = true)
    private String uselessField;

    private Album album;//此处用来和Album形成多对一的关系(在song表中生成外键album_id)

    public String getName() {
        return name;
    }

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

    public int getDuration() {
        return duration;
    }

    public void setDuration(int duration) {
        this.duration = duration;
    }

    public String getUselessField() {
        return uselessField;
    }

    public void setUselessField(String uselessField) {
        this.uselessField = uselessField;
    }

    public Album getAlbum() {
        return album;
    }

    public void setAlbum(Album album) {
        this.album = album;
    }
}

5.使用litepal

MainActivity

public class MainActivity extends AppCompatActivity {

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


    @OnClick({R.id.add,R.id.add_many_for_one,R.id.add_list,R.id.update,
            R.id.update1,R.id.delete,R.id.delete1,R.id.query,R.id.query1,
            R.id.query2,R.id.query3,R.id.save})
    public void onClick(View view){
        switch(view.getId()){
            case R.id.add://增加数据
                Album album = new Album();
                album.setName("单独的album"+getRandomNum());
                album.save();
                break;
            case R.id.add_many_for_one://增加一对多关系的数据
                Album album1 = new Album();
                album1.setName("一对多关系的album"+getRandomNum());
                album1.setPrice(10.99f);
                album1.save();
                Song song1 = new Song();
                song1.setName("song"+getRandomNum());
                song1.setDuration(320);
                song1.setAlbum(album1);
                song1.save();
                Song song2 = new Song();
                song2.setName("song"+getRandomNum());
                song2.setDuration(356);
                song2.setAlbum(album1);
                song2.save();
                break;
            case R.id.add_list://增加集合
                List<Album> albumList = new ArrayList<>();
                for(int i=0;i<5;i++){
                    Album album2 = new Album();
                    album2.setName("集合中的album++"+i);
                    albumList.add(album2);
                }
                LitePal.saveAll(albumList);
                break;
            case R.id.update://根据id修改数据
                Album album2 = new Album();
                album2.setName("修改后的名字");
                album2.update(1);
                break;
            case R.id.update1://根据自己设置的条件修改数据
                Album album3 = new Album();
                album3.setName("修改后的名字=====");
                album3.updateAll("id > ? and name =?","20","集合中的album4");
//                album3.updateAll();
                break;
            case R.id.delete://根据id删除
                LitePal.delete(Album.class,1);
                break;
            case R.id.delete1://根据自己设置的条件删除数据
                LitePal.deleteAll(Album.class,"id > ?","21");
//                LitePal.deleteAll(Album.class);
                break;
            case R.id.query://根据id查询数据
                Album album4 = LitePal.find(Album.class,2);
                Log.e("打印查询的数据",album4.getName());
                break;
            case R.id.query1://查询全部数据
                List<Album> allAlbums = LitePal.findAll(Album.class);
                for(int i=0;i<allAlbums.size();i++){
                    Log.e("打印集合"+i,"的名字:"+allAlbums.get(i).getName());
                }
                break;
            case R.id.query2://根据自己设置的条件查询
                List<Album> allAlbums1 = LitePal.
                        where("name like ? and id > ?","集合中的%","17").
                        order("id desc").
                        find(Album.class);
                for(int i=0;i<allAlbums1.size();i++){
                    Log.e("打印集合"+i,"的名字:"+allAlbums1.get(i).getName());
                }
                break;
            case R.id.query3://在处理大量数据采用异步方式查询
                LitePal.findAllAsync(Album.class).listen(new FindMultiCallback() {
                    @Override
                    public <T> void onFinish(List<T> list) {
                        Log.e("打印集合长度",list.get(0).toString());
                    }
                });
                break;
            case R.id.save://在处理大量数据采用异步方式插入数据
                Album album5 = new Album();
                album5.setName("插入大量数据"+getRandomNum());
                album5.setPrice(10.55f);
                album5.saveAsync().listen(new SaveCallback() {
                    @Override
                    public void onFinish(boolean b) {
                        Log.e("打印存储是否成功",b+"");
                    }
                });
                break;
        }
    }

    
    private int  getRandomNum(){
        return (int)(Math.random()*100);
    }


}

MainActivity的布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">
            <Button
                android:id="@+id/add"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="增加数据"/>

            <Button
                android:id="@+id/add_many_for_one"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="增加数据(多对一关系)"/>

            <Button
                android:id="@+id/add_list"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="增加集合"/>

            <Button
                android:id="@+id/update"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="根据id修改"/>

            <Button
                android:id="@+id/update1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="根据条件修改"/>

            <Button
                android:id="@+id/delete"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="根据id删除"/>

            <Button
                android:id="@+id/delete1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="根据条件删除"/>

            <Button
                android:id="@+id/query"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="根据id查询"/>

            <Button
                android:id="@+id/query1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="查询全部数据"/>

            <Button
                android:id="@+id/query2"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="查询条件数据"/>

            <Button
                android:id="@+id/query3"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="如果有大量数据,查询使用异步"/>

            <Button
                android:id="@+id/save"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="如果有大量数据,插入使用异步"/>

        </LinearLayout>
    </ScrollView>

</LinearLayout>

6.查看手机中本地数据库

查看手机本地数据库的数据,下载RE文件管理器,然后去根目录下寻找data/data/包名/databases/数据库名称 直接点开查看(手机需要先root,模拟器可以直接查看)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41659081/article/details/102553104