【问题标题】:How to print a list of open cursors in sqlite?如何在sqlite中打印打开的游标列表?
【发布时间】:2011-07-05 08:46:38
【问题描述】:

是否有一个选项可以在 sqlite 的某个时间点查看所有打开的游标? 我知道在 .Net 上有一些功能可以做到这一点(查看与数据库的所有连接......)

但是我可以用 sqlite 做什么呢?

【问题讨论】:

    标签: android sqlite database-connection


    【解决方案1】:

    我认为没有办法直接获取这些信息。不过,您可以创建自己的 Cursor 子类,它在静态列表中跟踪当前打开的 Cursors。

    例如(伪代码,未测试):

    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;
        }
    
    }
    

    您需要向数据库提供您自己的工厂,以便创建您的 TrackingCursors 而不是普通的 SQLiteCursors。

    public class TrackingCursorFactory implements SQLiteDatabase.CursorFactory {
    
        Cursor newCursor(SQLiteDatabase db, SQLiteCursorDriver masterQuery,
                         String editTable, SQLiteQuery query) {
            return new TrackingCursor(db, masterQuery, editTable, query);
        }
    }
    

    最后告诉数据库在调用openDatabase时通过将工厂作为参数传递来使用这个工厂。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-03
      • 1970-01-01
      • 1970-01-01
      • 2018-01-12
      • 1970-01-01
      • 2017-10-28
      • 2013-02-22
      相关资源
      最近更新 更多