如何在sqlite中打印打开游标列表?

时间:2011-07-05 08:46:39

标签: android sqlite database-connection

是否可以选择在sqlite中的某个时间点查看所有打开的游标? 我知道在.Net上有一些功能可以执行此操作(查看与数据库的所有连接...)

但是我能用sqlite做什么?

1 个答案:

答案 0 :(得分:8)

我认为没有办法直接获取这些信息。但是,您可以创建自己的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

public class TrackingCursorFactory implements SQLiteDatabase.CursorFactory {

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

最后告诉DB使用此工厂,在调用openDatabase时将工厂作为参数传递。