Android 第十六課 使用LitePal查詢數據

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













本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/274103.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/274103.shtml
英文地址,請注明出處:http://en.pswp.cn/news/274103.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

linux創建桌面圖標,和開始菜單欄圖標

轉自&#xff1a;http://blog.csdn.net/qq_25773973/article/details/50514767 ###環境&#xff1a;Mint17&#xff0c;&#xff08;其他類似的linux系統是一樣的&#xff09; 如果開始菜單有圖標&#xff0c;創建桌面圖標很簡單&#xff0c;右鍵添加到桌面即可。 如果沒有&am…

ScrollView中使用ListView

轉自 http://blog.csdn.net/fzh0803/article/details/7971391 由于scrollview和listview不能直接共存&#xff0c;在scrollview中直接使用lsitview的話只會顯示一個條目&#xff0c;要使他們共存&#xff0c; 據我所知&#xff0c;有三種方法&#xff1a; 1。如果listview的高度…

Android 第十四課 使用LitePal添加數據(更新數據)

我們注意到當你登錄一個app&#xff0c;是不是需要先注冊呢&#xff1f;&#xff0c;所謂注冊&#xff0c;簡單地來理解是不是就是把輸入框中地數據傳入數據庫中呢&#xff1f; 這里我們設置簡單一點&#xff0c;注冊的信息只包括兩項&#xff0c;一項是用戶名&#xff0c;另一…

微信公眾平臺的服務號和訂閱號

微信公眾平臺 服務號 訂閱號 作者&#xff1a;方倍工作室 地址&#xff1a;http://www.cnblogs.com/txw1958/p/ServiceNumber-subscriptionNumber.html 什么是服務號&#xff1f; 服務號給企業和組織提供更強大的業務服務與用戶管理能力&#xff0c;幫助企業快速實現全新的公眾…

Android 第十七課 碎片的簡單用法及動態添加碎片

Fragment(碎片)是一種可以嵌入在活動當中的UI片段&#xff0c;它可以讓程序更加合理和充分的利用大屏幕的空間。碎片和活動太像了&#xff0c;同樣都包含布局&#xff0c;都有自己的聲明周期&#xff0c;可以將碎片理解為一種迷你型的活動。 新建FragmentTest項目。假設項目已經…

在Linux下禁用鍵盤、鼠標、觸摸板(筆記本)等輸入設備

在Linux系統下禁用鍵盤、觸摸板、鼠標等輸入設備&#xff0c;可以通過xinput命令來實現&#xff1a;主要涉及&#xff1a;#xinput list#xinput list-props list-number#xinput set-prop list-number func-number 1/0具體操作如下&#xff1a;step1&#xff1a;查看系統中有那些…

委托又給我惹麻煩了————記委托鏈的取消注冊、獲取返回值

今天改bug碰到了一個問題&#xff0c;有多個方法注冊到了一個事件里去&#xff0c;而這些方法本身又有點兒互斥&#xff0c;因而造成了bug&#xff0c;哥調試半天才發現&#xff0c;郁悶至極&#xff0c;遂復習了以前的知識并進行適當延伸&#xff0c;再將成果記錄及分享之&…

Python第一課

對python仰慕已久&#xff0c;今日下定決心學習。可能我是一時頭腦發熱&#xff0c;但我還是愿意堅持。 先了解一下&#xff1a;命令行模式和Python交互模式 在Windows開始菜單選擇“命令提示符”&#xff0c;就進入到命令行模式&#xff0c;它的提示符類似C:\>&#xff1a;…

C++模板專門化與重載

最近在復習C有關知識&#xff0c;又重新看<<Effective C>>&#xff0c;收獲頗豐。原來以前看這邊書&#xff0c;好多地方都是淺嘗輒止。<<Effective C>>條款25&#xff1a;考慮寫出一個不拋出異常的swap函數&#xff0c;涉及到C模板專門化(Templates S…

Android 第十八課 強大的滾動控件 RecyclerView

步驟&#xff1a; 一、添加依賴庫compilecom.android.support:recyclerview-v7:26.1.0 二、在activity_mian.xml中&#xff0c;添加RecyclerView控件&#xff0c;并占據整個頁面。 三、把你要在RecyclerView中展示的內容&#xff0c;設置成一個實體類Fruit&#xff0c;接著為Re…

通過rtcwake命令設置系統S3(休眠到內存)/S4(掛起到硬盤)一段時間后自動喚醒

rtcwake -m disk -s 60 //S4&#xff08;掛起&#xff09;60秒后自動喚醒 rtcwake -m mem -s 60 //S3(休眠&#xff09;60秒后自動喚醒

電商首頁設計的時候,就應該考慮這個

如果有目的去找某一類商品的人幾乎都會從導航或搜索進去了&#xff0c;看首頁的一般是屬于那些還沒想好要買什么東西的人&#xff0c;這些人一般都是漫無目的的瞎逛&#xff0c;看在首頁有沒有特價的或便宜的東西被撿到。 轉載于:https://www.cnblogs.com/wangzong/p/3256555.h…

JavaScript 第一課 JavaScript簡史

1、JavaScript的起源 Java在理論上可以部署在任何環境下&#xff0c;但是JavaScript卻更傾向于只應用在Web瀏覽器。JavaScript是一種腳本語言&#xff0c;通常只能通過Web瀏覽器去完成一些操作而不能像普通意義上的程序那樣獨立運行。因為需要Web瀏覽器進行解釋和執行&#xff…

Linux下的屏保設置 xset s 與 xset dpms

Linux下的屏保設置 xset s 與 xset dpmshttp://bbs.chinaunix.net/archiver/?tid-2112889.html用xset q 可以查看當前屏保的設置情況&#xff0c;黑屏方式的屏保有兩種狀態&#xff1a;1. xset 的s參數后面可接兩個數字參數&#xff0c;前一個即是進入屏保的秒數&#xff0…

ios即時通訊客戶端開發之-mac上安裝MySQL

一、安裝 到MySQL官網上http://dev.mysql.com/downloads/mysql/&#xff0c;下載mysql可安裝dmg版本 比如&#xff1a;Mac OS X ver. 10.7 (x86, 64-bit), DMG Archive 下載完的文件為&#xff1a;mysql-5.6.10-osx10.7-x86_64.dmg 1.點擊&#xff0c;安裝包里的 2.點擊安裝 安…

Android 第十九課 大喇叭--廣播機制----動態注冊監聽網絡變化與靜態注冊實現開機啟動

為了便于進行 系統級別的消息通知&#xff0c;Android引入了一套廣播消息機制。 1、廣播機制簡介&#xff1a;因為Android中的每個應用程序都可以對自己感興趣的廣播盡心注冊&#xff0c;這樣程序只會接收自己所關心的廣播內容&#xff0c;這些廣播來自于系統的&#xff0c;也可…

dbus 和 policykit 實例篇(python)

dbus 和 policykit 實例篇&#xff08;python&#xff09; 使用policykit 的程序一般都有一個dbus daemon程序來完成相關操作&#xff0c;這個dbus daemon 會在系統注冊一個system bus 服務名&#xff0c;用于響應要求root privileged的操作&#xff0c;當dbus請求到達時會先驗…

一個實際的sonar代碼檢查的配置文件

國內私募機構九鼎控股打造APP&#xff0c;來就送 20元現金領取地址&#xff1a;http://jdb.jiudingcapital.com/phone.html內部邀請碼&#xff1a;C8E245J &#xff08;不寫邀請碼&#xff0c;沒有現金送&#xff09;國內私募機構九鼎控股打造&#xff0c;九鼎投資是在全國股份…

JavaScript 第二課 JavaScript語法

本章內容&#xff1a;語句變量和數組操作符條件語句和循環語句函數與對象 ------------------------------------------------------------- 準備&#xff1a; 編寫JavaScript腳本只需要一個普通地文本編輯器和一個Web瀏覽器就足啦。 用JavaScript編寫的代碼必須通過HTML/XHTML…

和菜鳥一起學linux之DBUS基礎學習記錄

轉自&#xff1a;http://blog.csdn.net/eastmoon502136/article/details/10044993 D-Bus三層架構 D-Bus是一個為應用程序間通信的消息總線系統, 用于進程之間的通信。它是個3層架構的IPC 系統&#xff0c;包括&#xff1a; 1、函數庫libdbus &#xff0c;用于兩個應用程序互…