Android数据库LitePal的基本使用

导读:本篇文章讲解 Android数据库LitePal的基本使用,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

前言:
LitePal是一款开源的Android数据库框架,采用了对象关系映射(ORM)的模式,将平时开发时最常用的一些数据库功能进行了封装,使得开发者不用编写一行SQL语句就可以完成各种建表和増删改查的操作。

1.首先app/build.gradle添加依赖

implementation ‘org.litepal.android:java:3.0.0’

2.配置初始化LitePal

(1).AndroidManifest清单文件中添加

<manifest>
    <application
        android:name=”org.litepal.LitePalApplication”
        …
    >
        …
    </application>
</manifest>
(2).如果有属于自己的Application则继承LitePalApplication或者添加如下代码(2选一即可)

 @Override
    public void onCreate() {
        super.onCreate();
        LitePal.initialize(this);
    }
3.在app/src/main新建assets/litepal.xml(与java目录平级),如下图

Android数据库LitePal的基本使用

并添加如下代码:

<?xml version=”1.0″ encoding=”utf-8″?>
<litepal>
    <!–
    定义应用程序的数据库名称。默认情况下,每个数据库名称应以.db结尾。
    如果您没有使用.db命名数据库端,LitePal会自动为您添加后缀。–>
    <dbname value=”LitePalDemo” />

    <!–
    定义数据库的版本。每次要升级数据库时,版本标记都会有所帮助。
    修改您在映射标记中定义的模型,只需将版本值加1,即可自动处理数据库升级而无需担心。–>
    <version value=”1″ />
    <!–
    定义.db文件的位置。“internal”表示.db文件将存储在内部存储的数据库文件夹中,无人可以访问。
    “external”表示.db文件将存储在主外部存储设备上目录的路径中,其中应用程序可以放置其拥有的每个人都
    可以访问的永久文件。“内部”将作为默认值。 例如:
    <storage value =“external”/>–>

    <list>
        <!–注册新闻表–>
        <mapping class=”com.helloword.feng.NewsBean” />
    </list>
</litepal>
 

4.创建Bean实体类并继承LitePalSupport

public class NewsBean extends LitePalSupport {

    private String createTime;
    private String title;
    private String content;
    private int number;

    public String getCreateTime() {
        return createTime;
    }

    public void setCreateTime(String createTime) {
        this.createTime = createTime;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public int getNumber() {
        return number;
    }

    public void setNumber(int number) {
        this.number = number;
    }

    @Override
    public String toString() {
        return "NewsBean{" +
                "createTime='" + createTime + '\'' +
                ", title='" + title + '\'' +
                ", content='" + content + '\'' +
                ", number=" + number +
                '}';
    }
}

(2).xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <EditText
        android:id="@+id/editTitle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:minHeight="46dp"
        android:hint="存储的数据 标题"
        android:paddingStart="10dp"
        android:paddingEnd="15dp"
        android:textColor="@color/black"
        android:background="#00000000"/>

    <EditText
        android:id="@+id/editContent"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:minHeight="46dp"
        android:hint="存储的数据 内容"
        android:paddingStart="10dp"
        android:paddingEnd="15dp"
        android:textColor="@color/black"
        android:background="#00000000"/>

    <TextView
        android:id="@+id/litePalAdd"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/design_default_color_secondary"
        android:minHeight="46dp"
        android:text="数据库-- 增加"
        android:layout_marginTop="5dp"
        android:textColor="@color/white"
        android:gravity="center"
        android:textSize="20sp"/>

    <TextView
        android:id="@+id/litePalAddList"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/design_default_color_secondary"
        android:minHeight="46dp"
        android:text="数据库-- 批量增加"
        android:layout_marginTop="15dp"
        android:textColor="@color/white"
        android:gravity="center"
        android:textSize="20sp"/>

    <TextView
        android:id="@+id/litePalDelete"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/design_default_color_secondary"
        android:layout_marginTop="15dp"
        android:minHeight="46dp"
        android:text="数据库-- 删除"
        android:textColor="@color/white"
        android:gravity="center"
        android:textSize="20sp"/>

    <TextView
        android:id="@+id/litePalChange"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/design_default_color_secondary"
        android:layout_marginTop="15dp"
        android:minHeight="46dp"
        android:text="数据库-- 修改"
        android:textColor="@color/white"
        android:gravity="center"
        android:textSize="20sp"/>

    <TextView
        android:id="@+id/litePalQuery"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/design_default_color_secondary"
        android:layout_marginTop="15dp"
        android:minHeight="46dp"
        android:text="数据库--查询"
        android:textColor="@color/white"
        android:gravity="center"
        android:textSize="20sp"/>

</LinearLayout>

(3).Acitivty

package com.zdmtech.androidlitepal;

import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import com.zdmtech.androidlitepal.moudle.NewsBean;

import org.litepal.LitePal;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private Context mContext;
    private TextView litePalAdd, litePalAddList, litePalDelete, litePalChange, litePalQuery;
    private EditText editTitle, editContent;
    private int litePallIndex = 1;
    private String name = "";
    private String content = "";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mContext = this;
        initView();

    }

    public void initView() {
        editTitle = findViewById(R.id.editTitle);
        editContent = findViewById(R.id.editContent);
        litePalAdd = findViewById(R.id.litePalAdd);
        litePalAddList = findViewById(R.id.litePalAddList);
        litePalDelete = findViewById(R.id.litePalDelete);
        litePalChange = findViewById(R.id.litePalChange);
        litePalQuery = findViewById(R.id.litePalQuery);

        litePalAdd.setOnClickListener(this);
        litePalAddList.setOnClickListener(this);
        litePalDelete.setOnClickListener(this);
        litePalChange.setOnClickListener(this);
        litePalQuery.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.litePalAdd:
                showToast("添加一条数据");
                name = editTitle.getText().toString().trim();
                content = editContent.getText().toString().trim();
                NewsBean newsBean = new NewsBean();
                newsBean.setTitle(name);
                newsBean.setContent(content);
                newsBean.setTitle(name);
                newsBean.setCreateTime("2021-02-21 : 17:32");
//                newsBean.save()
                if (newsBean.save()) {
                    showToast("保存成功");
                } else {
                    showToast("保存失败");
                }
                break;
            case R.id.litePalAddList:
                showToast("添加多条数据");
                //批量添加
                List<NewsBean> list = new ArrayList<>();
                //②:一次性添加5条
                for (int i = 0; i < 5; i++) {
                    litePallIndex = litePallIndex + 1;
                    NewsBean listBean = new NewsBean();
                    listBean.setCreateTime("2020-02-21" + litePallIndex);
                    listBean.setTitle("张三" + litePallIndex);
                    listBean.setContent("李四" + litePallIndex);
                    list.add(listBean);
                }
                LitePal.saveAll(list);
                break;
            case R.id.litePalDelete:
                showToast("删除一条数据");
//                //删除单个记录,id=1
//                LitePal.delete(NewsBean.class, position);
//                //删除数据库中NewsBean表的所有记录
//                LitePal.deleteAll(NewsBean.class);
//                //删除数量大于100的
//                LitePal.deleteAll(NewsBean.class, "number > ?", "100");
//                //删除标题为张三的
                LitePal.deleteAll(NewsBean.class, "title = ?", "张三2");
//                //删除标题为张三,内容为李四的记录
//                LitePal.deleteAll(NewsBean.class, "title = ? and content = ?", "张三", "李四");
                break;
            case R.id.litePalChange:
                showToast("修改一条数据");
                //①:修改ID为1的记录,并将标题和内容分别设置为张三、李四
//                NewsBean newsBean = LitePal.find(NewsBean.class, 1);
//                newsBean.setTitle("张三");
//                newsBean.setContent("李四");
//                if (newsBean.save()) {
//                    Toast.makeText(this, "修改成功", Toast.LENGTH_SHORT).show();
//                    this.finish();
//                } else {
//                    Toast.makeText(this, "修改失败", Toast.LENGTH_SHORT).show();
//                }
//                //如下方式同上
//                NewsBean newsBean1 = new NewsBean();
//                newsBean1.setTitle("张三");
//                newsBean1.setContent("李四");
//                //直接更新id为1的记录
//                newsBean1.update(1);
//                //③:修改ID为1的记录
                NewsBean newsBean2 = new NewsBean();
                //更新所有title为张三6的记录,更新为李四
                newsBean2.setTitle("李四");
                newsBean2.updateAll("title = ?", "张三6");
//                //④:将title为张三,content为李四的数据修改为王五、赵六
//                NewsBean newsBean3 = new NewsBean();
//                newsBean3.setTitle("王五");
//                newsBean3.setContent("赵六");
//                newsBean3.setContent(releaseContent.getText().toString());
//                newsBean3.updateAll("title = ? and content = ?", "张三", "李四");
                break;

            case R.id.litePalQuery:
                showToast("查询");
                //①:查询表中所有的记录,返回的是泛型为NewsBean的List集合
                List<NewsBean> newsBeanList = LitePal.findAll(NewsBean.class);
                for (int i = 0; i < newsBeanList.size(); i++) {
                    Log.e("++++++", "标题 = " + newsBeanList.get(i).getTitle());
                }
                break;
        }
    }

//    private void queryNews() {
//        //①:查询表中所有的记录,返回的是泛型为NewsBean的List集合
//        List<NewsBean> newsBeanList = LitePal.findAll(NewsBean.class);
//
//        //②:查找表id为1的记录
//        NewsBean newsBean = LitePal.find(NewsBean.class, 1);
//
//        //③:获取表中的第一条数据与最后一条数据
//        NewsBean firstNews = LitePal.findFirst(NewsBean.class);
//        NewsBean latNews = LitePal.findLast(NewsBean.class);
//
//        //④:查询表中的第5、10、15条数据
//        List<NewsBean> newsList1 = LitePal.findAll(NewsBean.class, 5, 10, 15);
//        //或者定义一个数组
//        long[] ids = new long[]{5, 10, 15};
//        List<NewsBean> newsList2 = LitePal.findAll(NewsBean.class, ids);
//
//        //⑤:查找title为张三的记录,并且以时长作排序(按时间desc倒序  asc 正序),where()方法接收任意个字符串参数,
//        //其中第一个参数用于进行条件约束,从第二个参数开始,都是用于替换第一个参数中的占位符的。那这个where()方法就对应了一条SQL语句中的where部分。
//        List<NewsBean> movies = LitePal.where("title = ?", "张三").
//                order("time desc").find(NewsBean.class);
//        //将查询出的新闻按照发布的时间倒序排列,只要title和content这两列数据,即最新发布的新闻放在最前面,那就可以这样写:
//        List<NewsBean> newsList = LitePal.select("title", "content")
//                .where("title > ?", "张三")
//                .order("time desc").find(NewsBean.class);
//        //设置查询的数量与偏移量
//        List<NewsBean> newsBeans = LitePal.select("title", "content")
//                .where("title > ?", "张三")
//                .order("time desc")
//                .limit(30)//只查询前面30条
//                .offset(20)//分页查询,每次查20条
//                .find(NewsBean.class);
//    }
//
//    /**
//     * 异步查询
//     * 默认情况每个数据库操作都在主线程上。如果您的操作可能花费很长时间则需要使用异步操作。
//     * Litepal支持对所有CRUD方法执行异步操作。
//     */
//    private void syncQueary() {
//        //1、 异步查询示例
//        //使用findallasync() 代替 findall() ,然后调用 listen() 方法,查询完成就会回调onFinish()方法
//        LitePal.findAllAsync(NewsBean.class).listen(new FindMultiCallback<NewsBean>() {
//            @Override
//            public void onFinish(List<NewsBean> allSongs) {
//                //查询结果
//            }
//        });
//        //2、异步保存示例
//        NewsBean newsBean = new NewsBean();
//        newsBean.setTitle("张三");
//        newsBean.setContent("李四");
//        newsBean.saveAsync().listen(new SaveCallback() {
//            @Override
//            public void onFinish(boolean success) {
//            }
//        });
//    }


    //toast
    private void showToast(String content) {
        Toast.makeText(mContext, content, Toast.LENGTH_SHORT).show();
    }
}

此时简单的增删改查就写好了

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/119187.html

(0)
seven_的头像seven_bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!