新聞中心
隨著智能手機(jī)的普及,Android系統(tǒng)成為了目前更受歡迎的操作系統(tǒng)之一。在開發(fā)Android應(yīng)用程序的過程中,數(shù)據(jù)庫(kù)的使用是必不可少的一部分。而Cursor作為Android自帶的一種輕量級(jí)的數(shù)據(jù)讀取方式,也備受開發(fā)者青睞。本文將詳細(xì)介紹android數(shù)據(jù)庫(kù)cursor的使用技巧,以及相關(guān)的注意事項(xiàng)。

創(chuàng)新互聯(lián)建站2013年至今,先為馬關(guān)等服務(wù)建站,馬關(guān)等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為馬關(guān)企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
一、Cursor的基本概念
Cursor是Android平臺(tái)中用于讀取和寫入數(shù)據(jù)庫(kù)的接口。通俗的說,我們可以把它類比成一個(gè)游標(biāo),可以在數(shù)據(jù)庫(kù)中進(jìn)行位置的定位和移動(dòng),并可以通過其提供的API讀取或更新對(duì)應(yīng)位置的數(shù)據(jù)。
Cursor的實(shí)現(xiàn)類有很多種,由于其使用頻率很高,因此我們需要了解一些相關(guān)的使用技巧。比如:
1.一般情況下,我們都需要將Cursor與SQLiteOpenHelper一起使用,以方便操作數(shù)據(jù)庫(kù)。
2.如果數(shù)據(jù)量較多,Cursor可能會(huì)在操作數(shù)據(jù)庫(kù)過程中占用大量的內(nèi)存。因此,在使用完Cursor之后,一定要在finally或者try-with-resources塊中釋放資源。
3.如果需要在Cursor中獲取數(shù)據(jù)總數(shù),可以使用getCount()方法進(jìn)行獲取,但是如果數(shù)據(jù)量非常大,這個(gè)方法的執(zhí)行效率可能會(huì)較低。一種更好的實(shí)現(xiàn)方式是使用LIMIT和OFFSET關(guān)鍵字來實(shí)現(xiàn)分頁查詢,盡量減少不必要的數(shù)據(jù)讀取。
二、Cursor的使用技巧
1.遍歷Cursor
Cursor提供了一些用于遍歷數(shù)據(jù)的API,我們可以通過它們遍歷查詢結(jié)果中的所有記錄。比如,我們可以使用moveToNext()方法逐步向后移動(dòng),并使用getColumnIndex()和getInt()等API獲取具體的數(shù)據(jù)。
代碼實(shí)現(xiàn)如下:
“`
Cursor cursor = db.rawQuery(“SELECT * FROM Person”, null);
if (cursor != null) {
try {
while (cursor.moveToNext()) {
int id = cursor.getColumnIndex(“id”);
int name = cursor.getColumnIndex(“name”);
int age = cursor.getColumnIndex(“age”);
int idValue = cursor.getInt(id);
String nameValue = cursor.getString(name);
int ageValue = cursor.getInt(age);
// do something with the data
}
} finally {
cursor.close();
}
}
“`
在上述代碼中,我們首先查詢了Person表中的所有記錄。之后,在while循環(huán)中,每次調(diào)用moveToNext()方法向后移動(dòng),獲取當(dāng)前位置的數(shù)據(jù)。在finally塊中釋放資源,避免內(nèi)存泄露。
2.篩選數(shù)據(jù)
Cursor還提供了許多用于篩選和排序數(shù)據(jù)的操作。比如,我們可以使用WHERE子句來篩選指定的記錄,使用ORDER BY子句來對(duì)查詢結(jié)果進(jìn)行排序。具體的使用方法如下:
代碼實(shí)現(xiàn)如下:
“`
Cursor cursor = db.rawQuery(“SELECT * FROM Person WHERE age > 18 ORDER BY id DESC”, null);
if (cursor != null) {
try {
while (cursor.moveToNext()) {
// do something with the data
}
} finally {
cursor.close();
}
}
“`
在上述代碼中,我們使用了WHERE子句來篩選年齡大于18歲的記錄,并使用ORDER BY子句按照id倒序排序。這樣一來,我們就可以獲得一個(gè)更加精確的結(jié)果。
3.使用CursorLoader
CursorLoader是官方文檔推薦的一種異步加載Cursor的方式,它可以幫助我們?cè)趻呙璐罅繑?shù)據(jù)時(shí)減少線程卡頓的問題,并提升用戶的操作體驗(yàn)。
使用CursorLoader的過程相對(duì)較為簡(jiǎn)單,我們需要實(shí)現(xiàn)LoaderCallbacks接口,重載onCreateLoader、onLoadFinished和onLoaderReset三個(gè)方法,然后在Activity或者Fragment中進(jìn)行調(diào)用即可。具體的實(shí)現(xiàn)方式可以參考下面的代碼:
“`
public class PersonLoader extends CursorLoader {
private SQLiteDatabase db;
public PersonLoader(Context context, SQLiteDatabase db) {
super(context);
this.db = db;
}
@Override
public Cursor loadInBackground() {
return db.rawQuery(“SELECT * FROM Person”, null);
}
}
public class MnActivity extends AppCompatActivity implements LoaderManager.LoaderCallbacks {
private SimpleCursorAdapter mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mn);
String[] from = new String[] { “name”, “age” };
int[] to = new int[] { R.id.name, R.id.age };
mAdapter = new SimpleCursorAdapter(this, R.layout.list_item, null, from, to, 0);
ListView listView = findViewById(R.id.list_view);
listView.setAdapter(mAdapter);
getLoaderManager().initLoader(0, null, this);
}
@Override
public Loader onCreateLoader(int id, Bundle args) {
SQLiteDatabase db = new DatabaseHelper(this).getWritableDatabase();
return new PersonLoader(this, db);
}
@Override
public void onLoadFinished(Loader loader, Cursor data) {
mAdapter.swapCursor(data);
}
@Override
public void onLoaderReset(Loader loader) {
mAdapter.swapCursor(null);
}
}
“`
在上述代碼中,我們定義了一個(gè)PersonLoader,用于異步加載數(shù)據(jù)庫(kù)中的Person表。通過getLoaderManager().initLoader()方法進(jìn)行初始化,并在onLoadFinished()回調(diào)中更新ListView的數(shù)據(jù)源。這樣一來,即使數(shù)據(jù)量較大,也能較好地保證程序的運(yùn)行速度。
三、小結(jié)
相關(guān)問題拓展閱讀:
- android問題:cursor查找出來的數(shù)據(jù)如何綁定到listview
android問題:cursor查找出來的數(shù)據(jù)如何綁定到listview
在你的sql類里面設(shè)置一個(gè)list 用cursor查出來的,一個(gè)一個(gè)加入list,數(shù)據(jù)加入完成了就返回給list,直接用listview置入list到適配器里
從你的問題中我總結(jié)出來的知識(shí)點(diǎn)包括:
cursor查詢數(shù)據(jù)庫(kù)中的數(shù)據(jù)
AsyncTask異步操作
創(chuàng)建listview有關(guān)的Adapter適配器
大體流程操作如下:
由于數(shù)據(jù)庫(kù)操作屬于耗時(shí)操作,因此要放在異步線程中執(zhí)行,cursor在查詢出數(shù)據(jù)以后,封裝到當(dāng)中,這就需要我們首先定義出一個(gè)實(shí)體類bean。bean中包含你從數(shù)據(jù)庫(kù)中cursor出來的字段。查詢出來的字段封裝到bean中,然后通過Adapter適配器將插敘出來的數(shù)據(jù)進(jìn)行顯示。
下面寫出關(guān)鍵代碼:
cursor查詢數(shù)據(jù)庫(kù)
Cursor cursor = database.rawQuery(“select * from 表名 where 字段=’查詢字段'”,null);
代碼封裝到bean中:
while (cursor.moveToNext()) {
Bean bean = new Bean();
bean.setId(cursor.getString(0));
bean.setName(cursor.getString(1));
XXXX.add(XXXXbean);
}
創(chuàng)建Adapter適配器:
listViewAdapter = new ListViewAdapter(this, XXXX); // 創(chuàng)建適配器
XXXX_list.setAdapter(listViewAdapter);
bean實(shí)體類代碼、Adapter設(shè)置數(shù)據(jù)代碼略
list list=new ….
查詢數(shù)據(jù)庫(kù)
while(cursor.next…)『
map map=new ..
map.put(… ….);
list.add(map);
return list
』.
android數(shù)據(jù)庫(kù)cursor的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于android數(shù)據(jù)庫(kù)cursor,淺談Android數(shù)據(jù)庫(kù)Cursor使用技巧,android問題:cursor查找出來的數(shù)據(jù)如何綁定到listview的信息別忘了在本站進(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ù)器等。
網(wǎng)頁名稱:淺談Android數(shù)據(jù)庫(kù)Cursor使用技巧(android數(shù)據(jù)庫(kù)cursor)
網(wǎng)站路徑:http://www.dlmjj.cn/article/cogeoji.html


咨詢
建站咨詢
