Как напечатать список открытых курсоров в sqlite? - PullRequest
1 голос
/ 05 июля 2011

Есть ли возможность увидеть все открытые курсоры в определенный момент времени в sqlite? Я знаю, что есть некоторые функции для этого в .Net (чтобы увидеть все соединения с базой данных ...)

Но что я могу сделать с sqlite?

1 Ответ

8 голосов
/ 05 июля 2011

Я не думаю, что есть способ получить эту информацию напрямую. Однако вы можете создать собственный подкласс Cursor, который отслеживает открытые в данный момент Cursor s в статическом списке.

Например (псевдокод, не тестировался):

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 s были созданы вместо простых SQLiteCursor s.

public class TrackingCursorFactory implements SQLiteDatabase.CursorFactory {

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

И, наконец, скажите БД использовать эту фабрику, передав фабрику в качестве параметра при вызове openDatabase.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...