好吧,所以我试图从我的SQLite DB中创建一个小而轻量级的ArrayList
。
以下是代码:
public ArrayList<Album> getAlbums()
{
Cursor cursor = null;
Cursor cursor2 = null;
try{
Log.d(Global.TAG, "STARTING");
ArrayList<Album> albums = new ArrayList<Album>();
Album album = new Album();
db = getOpenDatabase(DBADS);
String albumQuery = "SELECT * FROM " +albumsTableName + " ORDER BY " +albumIsMain + " DESC";
cursor = db.rawQuery(albumQuery, null);
if (cursor.moveToFirst()){
do {
Log.d(Global.TAG, "IN LOOP");
album = new Album();
album.id = cursor.getInt(0);
album.albumName = cursor.getString(1);
album.passcode = cursor.getString(2);
album.isMainAlbum = cursor.getInt(3) == 1 ? true : false;
albumQuery = "SELECT COUNT(*) FROM " + picturesTableName+" WHERE "+ pictureAlbumId +"="+album.id;
cursor2 = db.rawQuery(albumQuery, null);
cursor2.moveToFirst();
album.photosCount = cursor2.getInt(0);
cursor2.close();
albums.add(album);
}
while (cursor.moveToNext());
}
Log.d(Global.TAG, "RETURNING");
return albums;
}
catch(Exception ex)
{
Toast.makeText(context, ex.toString(), Toast.LENGTH_LONG).show();
}
finally
{
if(cursor != null){
cursor.close();
}
if(cursor2 != null){
cursor2.close();
}
if(cursor3 != null){
cursor3.close();
}
}
return null;
}
以下代码执行时间仅为8秒,总共只有6个项目!这只是非常慢 这里没有1000行,但只有6行。 经过一些调试后,我看到如果我删除另一个第二个内部光标,它会变得非常快。
可能是什么原因?
非常感谢。
答案 0 :(得分:0)
将第一个select语句的结果保存在列表中。然后将它们同时传递给第二个选择呼叫。你现在正在进行大量的数据库调用