2011-09-19 47 views
1

我正在使用JDBC驱动程序与SQlite连接。我想从SQLite命令提示符中检查在数据库引擎中打开了多少个连接。任何人都可以告诉我我该怎么做?Sqlite连接列表

+0

你使用zentus SQLiteJDBC吗? http://www.zentus.com/sqlitejdbc/ – Robert

回答

0

java.sql包中没有API可以做到这一点。您必须在您身边这样做,例如使用Singleton类来让您创建连接并跟踪此类创建连接的数量。

PS:当然,这只能算在底层运行的JVM实例

+0

谢谢您的回复。但我想知道如何使用sqlite3从命令提示符chk连接的数量 – newCommer

1

SQLite连接数是embedded database - 访问数据库文件基本上都有自己的数据库引擎的每个过程。独立引擎之间的唯一交互是通过底层操作系统的文件锁定工具,这可以确保在尝试更新数据库文件时,各种进程不会互相踩在一起。

由于这个设计,就SQLite而言,没有单一的控制点。 sqlite3 shell实用程序本质上包含SQLite数据库引擎本身的副本,这就是它如何处理DB文件 - 它不会“连接”到另一个应用程序。事实上,SQLite文档中的术语“连接”只是由于其对数据库工程师的熟悉而被错误地使用,实际上它只不过是打开一两个文件而已。

因此,sqlite3实用程序无法知道任何其他应用程序正在做什么,除了偶尔遇到另一个进程正在修改数据库时锁定的文件。

如果您想知道您的应用程序在底层数据库中所做的工作,您必须在基本SQLite3库中查找/编写一个包装,以执行您所需的任何其他簿记 - 可能会提供一个控制界面。基本SQLite库本身没有任何这样的设施,因为它们被认为超出了它的范围。

包装方法的问题是,您的应用程序仍然不知道任何其他进程正在做什么。您可能可以让所有使用包装程序的进程在中央访问点(文件/网络服务/ ...)收集数据,但仅此而已 - 任何其他进程(例如sqlite3 shell)仍然可以访问数据库直接文件。

但是,如果您只需知道数据库文件的“连接”数量,则可能存在(绝对不可移植的)方式:每个“连接”都会导致数据库文件被打开,因此您可能能够使用特定于平台的实用程序来查明哪些进程在每个时刻都打开了该文件。例如,在Linux上,您可以使用lsof实用程序。顺便说一下,如果您从应用程序的单个实例中多次打开同一个DB文件,则可能需要重新考虑您的体系结构 - 与传统的DB服务器相反,打开多个“连接”到单个SQLite数据库文件没有性能优势,甚至可能导致应用程序死锁,如果你不小心。