【发布时间】:2011-07-05 08:46:38
【问题描述】:
是否有一个选项可以在 sqlite 的某个时间点查看所有打开的游标? 我知道在 .Net 上有一些功能可以做到这一点(查看与数据库的所有连接......)
但是我可以用 sqlite 做什么呢?
【问题讨论】:
标签: android sqlite database-connection
是否有一个选项可以在 sqlite 的某个时间点查看所有打开的游标? 我知道在 .Net 上有一些功能可以做到这一点(查看与数据库的所有连接......)
但是我可以用 sqlite 做什么呢?
【问题讨论】:
标签: android sqlite database-connection
我认为没有办法直接获取这些信息。不过,您可以创建自己的 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时通过将工厂作为参数传递来使用这个工厂。
【讨论】: