2011-07-05 4 views
1

sqliteのある時点で開いているカーソルをすべて表示するオプションはありますか? これを行うためのいくつかの関数があることは知っています(データベースへのすべての接続を見るには...)sqliteで開いているカーソルのリストを印刷するには?

しかし、私はsqliteを使って何ができますか?

答えて

7

この情報を直接取得する方法はありません。あなたが行うことができるのは、Cursorの独自のサブクラスを作成して、現在開いているCursorを静的リストで追跡することです。例えば

(擬似コード、テストされていない):

public class TrackingCursor extends SQLiteCursor { 

    private static List<Cursor> openCursors = new LinkedList<Cursor>(); 

    public TrackingCursor(SQLiteDatabase db, SQLiteCursorDriver driver, 
          String editTable, SQLiteQuery query) { 
     super(db, driver, editTable, query); 
     openCursors.add(this); 
    } 

    public void close() { 
     openCursors.remove(this); 
    } 

    public static List<Cursor> getOpenCursors() { 
     return openCursors; 
    } 

} 

あなたのTrackingCursorのではなく、プレーンSQLiteCursor秒で作成されるように、DBに独自の工場を供給する必要があります。

public class TrackingCursorFactory implements SQLiteDatabase.CursorFactory { 

    Cursor newCursor(SQLiteDatabase db, SQLiteCursorDriver masterQuery, 
        String editTable, SQLiteQuery query) { 
     return new TrackingCursor(db, masterQuery, editTable, query); 
    } 
} 

そして最後に、あなたがopenDatabaseを呼び出し、パラメータとして工場を渡すことで、このファクトリを使用してDBに伝えます。

関連する問題