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

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


咨詢
建站咨詢
