新聞中心
在Android應用程序開發(fā)中,數(shù)據(jù)庫查找是非常常見的操作,而查詢數(shù)據(jù)庫記錄的條數(shù)也是一項必要的任務。無論是為了在用戶界面上顯示所查詢的總條數(shù),還是為了優(yōu)化某些功能,比如分頁功能,都需要查詢數(shù)據(jù)庫記錄的總數(shù)。

成都創(chuàng)新互聯(lián)服務項目包括遠安網(wǎng)站建設、遠安網(wǎng)站制作、遠安網(wǎng)頁制作以及遠安網(wǎng)絡營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,遠安網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務的客戶以成都為中心已經(jīng)輻射到遠安省份的部分城市,未來相信會繼續(xù)擴大服務區(qū)域并繼續(xù)獲得客戶的支持與信任!
但是,對于大型的數(shù)據(jù)庫,查詢記錄總數(shù)可能會非常耗時。本文將向你介紹一些在Android中快速查詢數(shù)據(jù)庫條數(shù)的技巧。
之一種方法:使用簡單的SELECT COUNT(*)查詢
在Android中,最簡單直接的方法是使用SELECT COUNT(*)查詢。這個SQL語句將返回數(shù)據(jù)庫表中所有記錄的總數(shù),無論是否符合搜索條件。
例如,假設你在你的數(shù)據(jù)庫表中有一個名為“Users”的表,并且你想要查詢所有名字叫“John”的用戶的總數(shù)。你可以這樣寫:
String query = “SELECT COUNT(*) FROM Users WHERE name = ‘John'”;
接下來,獲取Cursor并使用getInt()方法獲取結(jié)果:
Cursor cursor = db.rawQuery(query, null);
cursor.moveToFirst();
int count = cursor.getInt(0);
這種方法的好處是它非常簡單和快速,因為它直接從數(shù)據(jù)庫中獲取結(jié)果,但是它的缺點是它不太靈活,會返回整個表中符合條件的總數(shù),無論有多少行符合條件。
第二種方法:使用SELECT COUNT(*) + LIMIT查詢
對于大型的數(shù)據(jù)庫,使用SELECT COUNT(*)查詢可能會很慢并且占用大量的內(nèi)存空間。另一種更好的方法是使用SELECT COUNT(*) + LIMIT語句。
這種方法將首先根據(jù)搜索條件返回一個符合條件的結(jié)果集,并且僅僅返回給定數(shù)量的結(jié)果。將搜索結(jié)果限制到一定數(shù)量,減輕了數(shù)據(jù)庫的壓力。
這個方法的示例代碼如下所示:
String countQuery = “SELECT COUNT(*) FROM Users WHERE name = ‘John’ LIMIT 1”;
Cursor cursorCount = db.rawQuery(countQuery, null);
cursorCount.moveToFirst();
int count = cursorCount.getInt(0);
同上,我們可以使用Cursor和getInt()方法來獲取所需的結(jié)果集。
這種方法的好處是它減少了數(shù)據(jù)庫負載,提高了查詢的執(zhí)行速度。然而,它的缺點是有些復雜,不是所有的開發(fā)者都會運用這種技巧。
第三種方法:使用Android Cursorloader類
Cursorloader是Android生命周期敏感的異步查詢API,它可以從數(shù)據(jù)源異步加載數(shù)據(jù)庫記錄列表。其中之一的好處是它自動查詢數(shù)據(jù)庫中的總記錄數(shù)。
以下是一個使用Cursorloader的示例代碼:
public class UserListFragment extends ListFragment implements LoaderManager.LoaderCallbacks {
private static final int LOADER_ID = 1;
private SimpleCursorAdapter adapter;
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
String[] columns = new String[] { UsersDB.COLUMN_NAME };
int[] to = new int[] { android.R.id.text1 };
adapter = new SimpleCursorAdapter(getActivity(),
android.R.layout.simple_list_item_1, null, columns, to, 0);
setListAdapter(adapter);
getLoaderManager().initLoader(LOADER_ID, null, this);
}
@Override
public Loader onCreateLoader(int id, Bundle args) {
String[] projection = { UsersDB.COLUMN_ID, UsersDB.COLUMN_NAME };
return new CursorLoader(getActivity(), UsersContentProvider.CONTENT_URI, projection, null, null, null);
}
@Override
public void onLoadFinished(Loader loader, Cursor data) {
adapter.swapCursor(data);
getActivity().setTitle(“Users (” + data.getCount() + “)”);
}
@Override
public void onLoaderReset(Loader loader) {
adapter.swapCursor(null);
}
}
查詢數(shù)據(jù)并顯示在列表中。然后,使用getActivity().setTitle()方法來顯示數(shù)據(jù)庫的記錄總數(shù),這樣就省去了在查詢數(shù)據(jù)之前對數(shù)據(jù)庫進行另一次操作的麻煩。
這個方法的好處是它非常靈活和功能強大,但它的缺點是較為復雜和學習難度較高,需要開發(fā)者對Cursorloader有一定的掌握和深入的了解。
相關(guān)問題拓展閱讀:
- android 如何統(tǒng)計數(shù)據(jù)庫表內(nèi)數(shù)據(jù)
- android app如何從數(shù)據(jù)庫中獲取需要的數(shù)據(jù)?
android 如何統(tǒng)計數(shù)據(jù)庫表內(nèi)數(shù)據(jù)
“select sum(money) from table”
“select sum(money) from your_table”
android app如何從數(shù)據(jù)庫中獲取需要的數(shù)據(jù)?
要看數(shù)虧滾據(jù)庫在手機中,銷亮余鍵虛還是在服務器上。
手機中的數(shù)據(jù)庫訪問有專門的類SQLiteOpenHelper;
服務器上數(shù)據(jù)庫需要手機和服務器兩端編程,需要有json和xml的知識
Android 不自動提供數(shù)據(jù)庫。在 Android 應用程序中使用 SQLite,必須自己創(chuàng)建數(shù)據(jù)庫,然后創(chuàng)建表、索引,填充數(shù)據(jù)。Android 提供了 SQLiteOpenHelper 幫助你創(chuàng)建一個數(shù)據(jù)庫,你只要繼承 SQLiteOpenHelper 類,就可以輕松的創(chuàng)建數(shù)據(jù)庫。穗姿SQLiteOpenHelper 類根據(jù)開發(fā)應用程序的需要,封裝了創(chuàng)建和更新數(shù)據(jù)庫使用的邏輯。SQLiteOpenHelper 的子類,至少需要實現(xiàn)三個方法:
構(gòu)造函數(shù),調(diào)用父類 SQLiteOpenHelper 的構(gòu)造函數(shù)
onCreate()方法;// TODO 創(chuàng)建數(shù)據(jù)庫后,緩李對數(shù)據(jù)庫的操作
onUpgrage()方法。// TODO 更改數(shù)據(jù)庫版本的操作
當你完成了對數(shù)據(jù)庫的操作(例如你的 Activity 已經(jīng)關(guān)閉),需要調(diào)用 SQLiteDatabase 的 Close() 方法來釋放掉數(shù)據(jù)庫連接。
操作數(shù)據(jù)庫的更佳實踐是創(chuàng)建一個輔助類,例如聯(lián)系人模塊
class ContactsDatabaseHelper extends SQLiteOpenHelper
3.2 Cursor類
Android使用Cursor類返回一個需要的值,Cursor作為一個指針從數(shù)據(jù)庫查詢返回結(jié)果集,使用Cursor允許Android更有效地管理它們需要的行和列,你使用ContentValues對象存儲鍵/值對,它的put()方法允許你插入不同數(shù)據(jù)類型的鍵值。
3.3 數(shù)據(jù)類型
SQLite 和其他數(shù)據(jù)庫更大的不同就是對數(shù)據(jù)類型的支持,創(chuàng)建一個表時,可以在 CREATE TABLE 語句中指定某列的數(shù)據(jù)類型,但是你可以把任何數(shù)據(jù)類型放入任何列中。當某個值插入數(shù)據(jù)庫時,SQLite 將檢查它的類型。如果該類型與關(guān)聯(lián)的列不匹配,則 SQLite 會嘗試將該值轉(zhuǎn)換成該列的類型。如果不能轉(zhuǎn)換,則該值將作為其本身具有的類型存儲。比如可以把一個字符串(String)放入 INTEGER 列。SQLite 稱這為“弱類型”(manifest typing.)。
四、數(shù)據(jù)庫操作
4.1創(chuàng)建和打開數(shù)據(jù)庫
在Android中創(chuàng)建和打開一個數(shù)據(jù)庫都可以使用openOrCreateDatabase方法來實現(xiàn),因為它會自動去檢測是否存在這個數(shù)據(jù)庫,如果存在則打開,如果不存在則創(chuàng)建一個數(shù)據(jù)庫:創(chuàng)建成功則返回一個SQLiteDatebase對象,否則拋出異常FileNotFoundException。
下面我們來創(chuàng)建一個名為Test的數(shù)據(jù)庫,并返回一個SQLiteDatabase對象mSQLiteDatabase。
mSQLiteDatabase=this.openOrCreateDatabase(“Test”,MODE_PRIVATE,null);
4.2創(chuàng)建表
通過execSQL方法來執(zhí)行一條SQL語句。
String CREATE_TABLE=”create table 表名(列名,列名,……)”;
mSQLiteDatabase.execSQL(CREATE_TABLE);
創(chuàng)建表的時候總要確定一個主鍵,這個字段是64位整型,別名_rowid。其特點就是自增長功能。當?shù)竭_更大值時,會搜索該字段未使用的值(某些記錄被刪除_rowid會被回收),所以要唯一嚴格增長的自動主鍵必須加擾族遲入關(guān)鍵字autoincrement。
4.3刪除表
mSQLiteDatabase(“drop table 表名”);
SQLite是輕量級嵌入式數(shù)據(jù)庫引擎,它支持 SQL 語言,并且只利用很少的內(nèi)存就有很好的性能。 SQLite 基本上符合 SQL-92 標準,和其他的主要 SQL 數(shù)據(jù)庫沒什么區(qū)別。它的優(yōu)點就是高效,Android 運行時環(huán)境包含了完整的 SQLite。
SQLite 和其他數(shù)據(jù)庫更大的不同就是對數(shù)據(jù)類型的支持,創(chuàng)建一個表時,可以在 CREATE TABLE 語句中指定某列的數(shù)據(jù)類型,但是你可以把任何數(shù)據(jù)類型放入任何列中。當某個值插入數(shù)據(jù)庫時,SQLite 將檢查它的類型。如果該類型與關(guān)聯(lián)的列不匹配,則 SQLite 會嘗試將該值轉(zhuǎn)換成該列的類型。如果不能轉(zhuǎn)換,則該值將作為其本身具有的類型存儲。比如可以把一個字符串(String)放入 INTEGER 列。SQLite 稱這為“弱類型”(manifest typing.)。 此外,SQLite 不支持一些標準的 SQL 功能,特別是外純空鍵約束(FOREIGN KEY constrains),嵌套 transcaction 和 RIGHT OUTER JOIN 和 FULL OUTER JOIN, 還有一些 ALTER TABLE 功能。 除了上述功能外,SQLite 是一個完慶褲燃整的 SQL 系統(tǒng),擁有完整的觸發(fā)器,交易等等。
Android 集成了 SQLite 數(shù)據(jù)庫 Android 在運行時(run-time)集成了 SQLite,所以每個 Android 應用程序都可以使用 SQLite 數(shù)據(jù)庫。
對于熟悉 SQL 的開發(fā)人員來時,在 Android 開發(fā)中使用 SQLite 相當簡單。但是,由于 JDBC 會消耗太多的系統(tǒng)資源,所以 JDBC 對于手機這種內(nèi)存受限設備來說并不合適。因此,Android 提供了一些新的 API 來使用 SQLite 數(shù)據(jù)庫,Android 開發(fā)中,程序員需要學使用這些 API。
Android 提供了 SQLiteOpenHelper 創(chuàng)建一個數(shù)據(jù)庫,只要繼承 SQLiteOpenHelper 類,就可以輕松的創(chuàng)建數(shù)據(jù)庫。SQLiteOpenHelper 類根據(jù)開發(fā)應用程序的需要,封裝了創(chuàng)建和更新數(shù)據(jù)庫使用的邏輯。
SQLiteOpenHelper 的子類,至少需要實現(xiàn)三個方法:
1 構(gòu)造函數(shù),調(diào)用父類 SQLiteOpenHelper 的構(gòu)造函數(shù)。這個方法需要四個參數(shù):上下文環(huán)境(例如,一個 Activity),數(shù)據(jù)庫名字,一個可選的游標工廠(譽虛通常是 Null),一個代表你正在使用的數(shù)據(jù)庫模型版本的整數(shù)。
2 onCreate()方法,它需要一個 SQLiteDatabase 對象作為參數(shù),根據(jù)需要對這個對象填充表和初始化數(shù)據(jù)。
3 onUpgrage() 方法,它需要三個參數(shù),一個 SQLiteDatabase 對象,一個舊的版本號和一個新的版本號,這樣你就可以清楚如何把一個數(shù)據(jù)庫從舊的模型轉(zhuǎn)變到新的模型。
app產(chǎn)生的數(shù)據(jù)保存在data/data中。用re文件管理器可以看到
android 查詢數(shù)據(jù)庫條數(shù)的介紹就聊到這里吧,感謝你花時間閱讀本站內(nèi)容,更多關(guān)于android 查詢數(shù)據(jù)庫條數(shù),Android快速查詢數(shù)據(jù)庫條數(shù)技巧揭密,android 如何統(tǒng)計數(shù)據(jù)庫表內(nèi)數(shù)據(jù),android app如何從數(shù)據(jù)庫中獲取需要的數(shù)據(jù)?的信息別忘了在本站進行查找喔。
香港服務器選創(chuàng)新互聯(lián),2H2G首月10元開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務提供商,擁有超過10年的服務器租用、服務器托管、云服務器、虛擬主機、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗。專業(yè)提供云主機、虛擬主機、域名注冊、VPS主機、云服務器、香港云服務器、免備案服務器等。
文章名稱:Android快速查詢數(shù)據(jù)庫條數(shù)技巧揭密(android查詢數(shù)據(jù)庫條數(shù))
當前路徑:http://m.fisionsoft.com.cn/article/cdojspe.html


咨詢
建站咨詢
