安卓:LitePal操作数据库

news2024/11/15 10:28:01

目录

一、LitePal介绍

常用方法:

1、插入数据:

2、更新数据:

3、删除数据:

4、查询数据:

二、LitePal的基本用法: 

1、集成LitePal:

 2、创建LitePal配置文件:

3、创建模型类:

 4、增删改查操作:

三、使用例子 

 MainActivity:

activity_main:

litepal.xml: 

运行结果: 

四、异常修复

一、LitePal介绍

        LitePal是一个开源的Android数据库框架,它提供了简单易用的API来帮助开发者进行数据库操作。LitePal允许开发者使用面向对象的方式来操作数据库,而无需编写复杂的SQL语句。

常用方法:

1、插入数据:

  • save():将当前模型对象保存到数据库中。
  • saveAll(Collection models):将指定的模型对象集合保存到数据库中。2

2、更新数据:

  • update():更新当前模型对象在数据库中的数据。
  • updateAll(String... conditions):根据条件更新符合条件的数据。

3、删除数据:

  • delete():删除当前模型对象在数据库中的数据。
  • deleteAll(Class<?> modelClass, String... conditions):根据条件删除符合条件的数据。
  • deleteAll(Class<?> modelClass):删除指定模型类的所有数据。

4、查询数据:

  • find(Class<?> modelClass, long id):根据id查询指定模型类的数据。
  • findFirst(Class<?> modelClass):查询指定模型类的第一条数据。
  • findLast(Class<?> modelClass):查询指定模型类的最后一条数据。
  • findAll(Class<?> modelClass):查询指定模型类的所有数据。
  • where(String... conditions):设置查询条件。
  • order(String... columns):设置查询结果的排序方式。
  • limit(int limit):设置查询结果的数量限制。
  • offset(int offset):设置查询结果的偏移量。
  • average(Class<?> modelClass, String column):计算指定列的平均值。
  • sum(Class<?> modelClass, String column):计算指定列的总和。
  • max(Class<?> modelClass, String column):计算指定列的最大值。
  • min(Class<?> modelClass, String column):计算指定列的最小值。

二、LitePal的基本用法: 

1、集成LitePal:

        首先,在项目的build.gradle文件中添加LitePal的依赖:

dependencies {
    implementation 'org.litepal.guolindev:core:版本号'
}

 2、创建LitePal配置文件:

        在项目的assets目录下创建litepal.xml文件,并配置数据库名称、版本号等信息。

<?xml version="1.0" encoding="utf-8"?>
<litepal>
    <dbname value="数据库名称" />
    <version value="数据库版本号" />

<list>
    <mapping class="com.example.litepaltest.Book"></mapping>
    <!-- 可以继续添加其他映射配置 -->
</list>
</litepal>

        在AndroidManifest.xml中的代码中,添加android:name = "org.litepal.LitePalApplication"

3、创建模型类:

        创建与数据库表对应的模型类,并继承自LitePalSupport。

import org.litepal.crud.LitePalSupport;

public class Book extends LitePalSupport {
    private int id;
    private String name;
    private String author;

    // 省略getter和setter方法
}

 4、增删改查操作:

  • 插入数据:
Book book = new Book();
book.setName("Android入门");
book.setAuthor("张三");
book.save(); // 将数据保存到数据库中
  • 更新数据:
Book book = new Book();
book.setName("Android进阶");
book.updateAll("name = ?", "Android入门"); // 将名称为"Android入门"的数据更新为"Android进阶"
  • 删除数据:
LitePal.delete(Book.class, id); // 根据id删除指定的数据
LitePal.deleteAll(Book.class, "name = ?", "Android入门"); // 根据条件删除数据
  • 查询数据:
List<Book> bookList = LitePal.findAll(Book.class); // 查询所有数据
Book book = LitePal.findFirst(Book.class); // 查询第一条数据
List<Book> bookList = LitePal.where("author = ?", "张三").find(Book.class); // 根据条件查询数据

三、使用例子 

 MainActivity:

package com.example.litepaldemo;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.view.View;

import org.litepal.FluentQuery;
import org.litepal.LitePal;

import java.util.List;

public class MainActivity extends AppCompatActivity {
String TAG = "MainActivity" ;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    }

    public void CreateDatabase(View view) {
        // 创建数据库
        LitePal.getDatabase();
    }

    public void addData(View view) {
        Book book = new Book();
        book.setId(1);
        book.setAuthor("柏拉图");
        book.setName("理想国");
        book.setPages(259);
        book.setPrice(9.9);
        book.save();
        Book book1 = new Book();
        book1.setId(2);
        book1.setAuthor("夸美纽斯");
        book1.setName("大教学论");
        book1.setPages(259);
        book1.setPrice(99.9);
        book1.save();
    }

    public void deleteData(View view) {
//        LitePal.delete(Book.class, 1); // 根据id删除指定的数据
        LitePal.deleteAll(Book.class, "name = ?", "Android进阶"); // 根据条件删除数据

    }

    public void queryData(View view) {
        List<Book> bookList = LitePal.findAll(Book.class); // 查询所有数据
        for (Book book : bookList) {
            Log.d(TAG, "书名: " + book.getName());
            Log.d(TAG, "作者: " + book.getAuthor());
            Log.d(TAG, "页数: " + book.getPages());
            Log.d(TAG, "价格: " + book.getPrice());
        }
    }


    public void modifiedData(View view) {
        Book book = new Book();
        book.setName("Android进阶");
        book.updateAll("name = ?", "大教学论");

    }
}

activity_main:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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">


    <Button
        android:id="@+id/create_database"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="创建数据库"
        android:onClick="CreateDatabase"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.498"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.13" />

    <Button
        android:id="@+id/add_data"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="增加数据"
        android:onClick="addData"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.498"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.278" />

    <Button
        android:id="@+id/del_data"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="删除数据"
        android:onClick="deleteData"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.498"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.395" />

    <Button
        android:id="@+id/query_data"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="查询数据"
        android:onClick="queryData"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.498"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.512" />

    <Button
        android:id="@+id/motified_data"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="修改数据"
        android:onClick="modifiedData"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.498"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.651" />

</androidx.constraintlayout.widget.ConstraintLayout>

litepal.xml: 

<?xml version="1.0" encoding="utf-8"?>
<litepal>
    <dbname value="BookStore" ></dbname>
    <version value="1" ></version>
    <list>
        <mapping class="com.example.litepaldemo.Book"></mapping>
    </list>
</litepal>

运行结果: 

 四、异常修复

使用LItePal:报错element ‘litepal‘ must be declared和Class referenced in the manifest, `org.litepal.LitePa_敬往事一杯酒哈的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/855175.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue+Vue Router+TailwindCss+Daisyui部署

一、构建Vue项目 > npm init vuelatest > cd <your-project-name> > npm install > npm run dev 二、设置IDEA JS版本 三、安装Tailwindcss Install Tailwind CSS with Vite - Tailwind CSS npm install -D tailwindcss postcss autoprefixer npx tai…

Linux下匿名管道简单模拟进程间通信

Linux下匿名管道简单模拟进程间通信 文章目录 Linux下匿名管道简单模拟进程间通信在这里插入图片描述1.引言2.具体实现2.1创建管道2.2创建子进程 && 通信(子进程写入)2.3关闭对应fd 3.结果 1.引言 ​ ​ 首先&#xff0c;管道是一种半双工的单向进程间通信方式&#…

有哪些简单的AI绘画软件?

随着人工智能技术的不断发展&#xff0c;越来越多的人工智能绘画软件出现了。人工智能绘画软件利用人工智能技术&#xff0c;通过计算机自动生成或辅助生成艺术作品。人工智能绘画软件通常集成了深度学习、计算机视觉和自然语言处理技术&#xff0c;可以模拟人类的创作过程&…

【数据结构与算法】十大经典排序算法-插入排序

&#x1f31f;个人博客&#xff1a;www.hellocode.top &#x1f3f0;Java知识导航&#xff1a;Java-Navigate &#x1f525;CSDN&#xff1a;HelloCode. &#x1f31e;知乎&#xff1a;HelloCode &#x1f334;掘金&#xff1a;HelloCode ⚡如有问题&#xff0c;欢迎指正&#…

【Shell】基础语法(三)

文章目录 一、Shell基础语法1. 位置参数和特殊变量2. 输入输出3. 管道4. 文件重定向5. 函数6. 脚本调试方法 二、Shell高级和正则表达式1. sort命令2. uniq命令3. wc命令4. grep命令5. find命令6. xargs7. sed命令8. crontab 一、Shell基础语法 1. 位置参数和特殊变量 $0 …

循环队列详解

1. 循环队列 1.1 概念及结构 循环队列是一种特殊类型的队列数据结构&#xff0c;也被称为”唤醒缓冲器“。它在数组的基础上实现了循环利用空间的功能。在循环队列中&#xff0c;队尾和队头之间形成了一个循环&#xff0c;当队尾指针“追上”队头指针时&#xff0c;队列不再继…

IDEA设置Tabs多行显示的方法

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 前言 在开发的时候、不知不觉我们就会打开很多代码页。如果打开的页面…

在线原型设计工具有好用的吗?就是这10个

随着设计工作的不断发展&#xff0c;原型设计在设计工作中越来越重要&#xff0c;而在线原型设计工具在减轻了设计师工作负担的同时也提高了设计师的工作效率&#xff0c;今天本文将为大家推荐10个能在线使用的原型设计工具&#xff0c;一起来看看吧&#xff01; 1、即时设计 …

CDC 数据复制:技术、权衡、见解

推荐&#xff1a;使用NSDT场景编辑器助你快速搭建可编辑的3D应用场景 在本文中&#xff0c;我将定义 CDC 数据复制&#xff0c;简要讨论最常见的用例&#xff0c;然后讨论常见技术及其权衡。最后&#xff0c;我将提供一些我作为数据集成公司Dataddo的首席执行官和创始人所学到…

使用logback异步打印日志

文章目录 一、介绍二、运行环境三、演示项目1. 接口2. 日志配置文件3. 效果演示4. 异步输出验证 四、异步输出原理五、其他参数配置六、源码分析1. 同步输出2. 异步输出 七、总结 一、介绍 对于每一个开发人员来说&#xff0c;在业务代码中添加日志是至关重要的&#xff0c;尤…

CSS:弹性盒子模型详解(用法 + 例子 + 效果)

目录 弹性盒子模型flex-direction 排列方式 主轴方向换行排序控制子元素缩放比例缩放是如何实现的&#xff1f; 控制子元素的对其方式justify-content 横向 对齐方式align-items 纵向 对齐方式 align-content 多行 对齐方式 弹性盒子模型 flex-direction 排列方式 主轴方向 f…

webshell免杀项目-Auto-JSPwebshell(五)

Auto-JSPwebshell/jsp免杀/webshell免杀/自动生成 项目地址&#xff1a; https://github.com/G0mini/Bypass 具体使用请参考&#xff1a; https://mp.weixin.qq.com/s/9-__B0MBRSXHla6O0KU7Gg

PCB制造中铜厚度的重要性

电子产品中的PCB是现代电子设备中不可或缺的一部分。在PCB制造过程中&#xff0c;铜厚度是一个非常重要的因素。正确的铜厚度可以保证电路板的质量和性能&#xff0c;同时也影响着电子产品的可靠性和稳定性。 一般我们常见的铜厚有17.5um&#xff08;0.5oz&#xff09;&#x…

SpringBootWeb案例-准备工作

目录 前言 准备工作 需求&环境搭建 需求 环境搭建 开发规范 Restful开发规范 统一的响应结果 开发流程 前言 根据过往的文章可以知道目前我已经学习完了前端、后端、数据库的基础知识&#xff0c;接下来通过一个基于SpringBoot工程开发的web项目案例。 准备工作 …

来讲一讲面试必问的异步FIFO设计!

异步FIFO设计可以说是数字IC设计工程师面试时必问的一个问题了&#xff0c;也是我们经常使用但是又往往被忽略的一个东西&#xff0c;今天就展开详细说一说不同深度&#xff08;2^N或者非2^N&#xff09;异步FIFO的设计思想&#xff1b; 一&#xff1a;2^N深度异步FIFO设计 1…

Unity开发笔记:截取指定位置含有UI的场景截图并输出

学习记录整理&#xff0c;自用&#xff0c;也希望能帮助到有相同需求的人。 如果直接截全图&#xff1a; string screenshotName "Assets/Textures/UI/20230803/2.png";ScreenCapture.CaptureScreenshot(screenshotName);截取指定位置含有UI的场景截图&#xff1a; …

Therac-25事故:软件缺陷引发的医疗灾难与教训

目录 引言 Therac-25&#xff1a;背景与功能 软件缺陷导致的灾难 Bug原理解析与编程人员的反思 教训与反思 结论 引言 在计算机科技的进步与应用领域&#xff0c;软件的质量和安全性至关重要。然而&#xff0c;历史上曾经发生过一系列令人震惊的事件&#xff0c;突显了软…

培训报名小程序报名功能完善

目录 1 修改数据源2 修改表单3 支付成功时修改状态4 创建报名成功页5 最终的效果总结 目前我们的报名功能已经搭建了一个基础版&#xff0c;后续需要展示用户已经报名的信息&#xff0c;需要添加一个状态来显示用户是否成功付费。 1 修改数据源 打开我们的报名数据源&#xff…

google PGS 下一代id

前言&#xff1a;为了进一步增强用户的隐私及其多平台游戏体验&#xff0c;Play 游戏服务(PGS) 正在推出下一代玩家 ID&#xff0c;用户第一次玩游戏时&#xff0c;他们将始终被分配一个唯一的下一代玩家 ID&#xff0c;无论用户在什么设备或平台上玩游戏&#xff0c;该 ID 都将…