LitePal在查询API方面做了非常多的优化,基本上可以满足绝大多数场景的查询需求,并且代码也十分整洁。

例如我们需要查询表中的所有数据:

List<books> = DataSupport.findAll(Book.class);

没有冗长的参数列表,只需要调用一下findAll()方法,然后通过Book.class参数指定查询Book就可以了。另外,findAll()方法的返回值是一个Book类型的List集合。例如,在一个登录界面,有两个Edittext和一个Button,用来输入用户名和密码,然后点击按钮进行登录,我们只是把这两个字段建成一张表,用来存储用户的登录信息。代码如下:

package com.example.testappb;import android.content.Intent;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;import org.litepal.LitePal;
import org.litepal.crud.DataSupport;import java.sql.BatchUpdateException;
import java.util.List;public class MainActivity extends AppCompatActivity {private Button user;private Button driver;private EditText accountEdit;private EditText passwordEdit;private Button login;private Button Register;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);.. ....//获取输入框内对象实例 user = (Button)findViewById(R.id.button_user) ;accountEdit =(EditText)findViewById(R.id.edittext_account);passwordEdit = (EditText)findViewById(R.id.edittext_password);//设置登录按钮透明度login = (Button)findViewById(R.id.login);login.getBackground().setAlpha(25);login.setOnClickListener(new View.OnClickListener() {@Override//public void onClick(View view) {String account= accountEdit.getText().toString();String password = passwordEdit.getText().toString();//  Driveruser driveruser =new Driveruser();//首先创造了一个Driveruser的实例。//  driveruser.getDtel();//使用set方法对数据进行设置//  driveruser.getDpassword();// driveruser.save();//使用save()保存。save方法来源于DataSupport中继承而来的//登录匹配数据库List<Driveruser> driveruers = DataSupport.findAll(Driveruser.class);for(Driveruser driveruser:driveruers){//遍历List集合中的Driveruser对象,然后下面依次比较,如果输入的用户名和密码与数据库中的存储的用户名和密码相似则允许登录,并跳转到下一个活动if((driveruser.getDtel().toString()).equals(account)&&(driveruser.getDpassword().toString()).equals(password)){Toast.makeText(MainActivity.this,"登录成功",Toast.LENGTH_SHORT).show();Intent intent = new Intent(MainActivity.this,FirstActivity.class);//登录成功,跳转到FirstActivity活动startActivity(intent);//启动活动finish();}else//异常判断{Toast.makeText(MainActivity.this,"用户名或者密码无效,请重新输入",Toast.LENGTH_SHORT).show();break;}}});..............}
}

除了findAll()方法,LitePal还提供了很多其他非常有用的查询API。比如我们想要

查询Book表中第一条数据,可以这样写:

Book firstBook = DataSupport.findFirst(Book.class);

查询Book表中的最后一条数据,可以这样写:

Book lastBook = DataSupport.findLast(Book.class);

还可以通过连缀查询来定制更多的查询功能。(与SQL对应)

  • select()方法用于指定查询哪几列的数据,查询name和author这两列的数据,可以这样写:

List<Book> books = DataSupport.select("name","author").find(Book.class);

  • where()方法用于指定查询的约束条件,比如只查询页数大于400的数据,可以这样写:

List<Book> books = DataSupport.where("pages > ?","400").find(Book.class);

  • order()方法用于指定结果的排序方式,对应SQL中的order by 关键字。比如将查询结果按照书价从高到低排序,这样写:

List<Book> books = DataSupport.order("price desc").find(Book.class);

其中desc表示降序排列,asc或者不写表示升序排列。

  • list()方法用于指定查询结果的数量,比如只查询表中的前3条数据,可以这样写:

List<Book> books = DataSupport.limit(3).find(Book.class);

offset()方法用于指定查询结果的偏移量,比如查询表中的第2条,第3条,第4条数据,就可以这样写:

List<Book> books = DataSupport.limit(3).offset(1).find(Book.calss).

limit()和offset()方法共同对应了SQL当中的limit关键字。

当然,我们还可以对这5个方法进行任意的连缀组合,来完成一个比较复杂的查询操作:

List<Book> books =

DataSupport.select("name","author","pages").where("pages>?","400").order("pages").limit(10).offset(10).find(Book.class)。

这段代码表示,查询Book表中第11——20条满足页数大于400这个条件的name,author和pages这三列数据,并将查询结果按照页数升序排列。但是,当有血特殊需求,上述的API都满足不了的时候,LitePal仍然支持使用原生的SQL来进行查询:

Cursor c= DataSupport.findBySQL("select * from Book where pages > ? and  price < ?","400","20");

调用DataSupport.findBySQL()方法进行原生查询,其中第一个参数用于指定SQL语句,后面的参数用于指定占位符的值。注意findBySQL()方法返回的是一个Cursor对象,接下来还需要通过之前的老方式将数据一一取出。所谓的老方式详见6.4.6节郭霖《第一行代码》第二版。P225

Android 第十六课 使用LitePal查询数据相关推荐

  1. Android 第十四课 使用LitePal添加数据(更新数据)

    我们注意到当你登录一个app,是不是需要先注册呢?,所谓注册,简单地来理解是不是就是把输入框中地数据传入数据库中呢? 这里我们设置简单一点,注册的信息只包括两项,一项是用户名,另一项是密码.我们干脆建 ...

  2. Android 第十二课 使用LitePal操作数据库(记得阅读最后面的注意事项哦)

    一.LitePal简介 1.(新建项目LitePalTest) 正式接触第一个开源库---LitePal LitePal是一款开源的Android 数据库框架,它采用了对象关系映射(ORM)的模式. ...

  3. Android数据库专家秘籍(七)经验LitePal查询艺术

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/40153833 经过了多篇文章的学习,我们已经把LitePal中的绝大部分内容都掌握 ...

  4. NeHe OpenGL第四十六课:全屏反走样

    NeHe OpenGL第四十六课:全屏反走样 全屏反走样 当今显卡的强大功能,你几乎什么都不用做,只需要在创建窗口的时候该一个数据.看看吧,驱动程序为你做完了一切.   在图形的绘制中,直线的走样是非 ...

  5. NeHe OpenGL教程 第三十六课:从渲染到纹理

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  6. Android Studio第六课:模仿QQ登录跳转

    Android Studio第六课:模仿QQ登录跳转 导包,添加依赖 登陆界面 欢迎界面 主界面 导包,添加依赖 找到build.gradle,后缀是自己建的项目名 // 基础依赖包,必须要依赖imp ...

  7. OpenGL教程翻译 第二十六课 法线纹理

    第二十六课 法线纹理 背景 我们之前使用的光照技术还算不错,光线在模型表面得到了很好的插值,为场景营造出真实感.但是这种效果还能够有非常大的提升.事实上,我们以前使用的这种插值方式在某种程度上来说是对 ...

  8. 量化交易 第十六课 单因子有效性分析之收益率分析

    第十六课 单因子有效性分析之收益率分析 概述 因子收益率 因子收益率计算 计算数值结果 分为数分组结果 因子在周期内的平均收益率 概述 我们需要通过分析因子的收益率来确定因子在不同股票位置上的表现. ...

  9. NeHe OpenGL教程 第二十六课:反射

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

最新文章

  1. 部署node.js的开发环境
  2. jQuery使用blur()方法触发两次的解决方法
  3. Spring Boot通过命令行启动发生FileNotFoundException
  4. Verilog代码风格
  5. IDEA 中tomcat上面有个x 而且找不到配置tomcat的选项
  6. 装完机,启grub+Linux,linux一路填坑...
  7. opencv图像分析与处理(16)- 图像压缩中的编码方法:LZW编码
  8. cmd 新建文件和新建文件夹
  9. 表情识别android项目,Github项目推荐 | Emotion-recognition 实时表情识别
  10. php里面像素怎么表示,php检索图片像素最接近的色值位置
  11. 四分位数(定义、位置、数值)
  12. Intel TBB 开发指南 3 parallel_reduce
  13. 解决VMware虚拟机中鼠标闪烁问题
  14. c语言罗马数字换成整数,leetcode 13 罗马数字转整数 C语言
  15. Snagit_日文输入法:促音,长音,小写的输入方法
  16. Linux一条命令----同步网络时间
  17. 基于python的AI五子棋实现(极大极小值搜索和alpha beta剪枝)
  18. Uncaught ReferenceError: UE is not defined at zh-cn.js:8
  19. 2017中国智能商用车国际峰会
  20. 使用.net 操作 微信公众平台 —— 接收用户操作 —— 接收用户发送的消息

热门文章

  1. java 跳转action_JS 跳转到指定Action | 学步园
  2. 使用Qt正则表达式提取全路径的文件名
  3. 图像处理核函数:之高斯核的生成方法 python
  4. 通讯中断 pc_S7程序RFID 与PC连接区别FB 65/UDT65
  5. C# winForm 定时访问PHP页面小工具
  6. 设△ABC的内角A,B,C,所对的边分别为a,b,c,且acosB-bcosA=3/5c,则tan(A-B)的最大值为
  7. 迭代器以及迭代器的作用
  8. 安装C语言版本tensorflow
  9. windows下快速启动或关闭系统服务方法
  10. UVA10785 The Mad Numerologist