ArrayList
よし、 SQLite DB から 少し軽量なものを作成しようとしています。
コードは次のとおりです。
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;
}
次のコードは、合計 6 つの項目に対して約 8 秒で実行されます。これは非常に遅いです。
ここには 1000 行ほどではありませんが、6 行しかありません。デバッグを行った後、他の 2 番目の内部カーソルを削除すると、非常に高速になることがわかりました。
その理由は何でしょうか?
どうもありがとう。