一次仅能有一个与 DB2 Everyplace 数据库的连接。在
除
Palm 之外的所有平台上,DB2 Everyplace 支持连接串行化。使用连接串行化,可以将数据源的连接请求串行起来。
每次只可以建立一个与给定数据源的活动连接。将其它连接请求放入到队列中。可以使用 SQLSetConnectAttr() 函数 SQL_ATTR_LOGIN_TIMEOUT
属性设置超时时间。典型的串行化方案包括:
-
串行化尝试打开与单个数据源的连接的多个进程;每次仅可对一个进程打开一个给定的数据源。
-
串行化尝试打开与单个数据源的连接的单个进程内的多个线程。
-
多个不同进程每个都可以同时对多个不同数据源打开一个连接。
例如,以下 CLI /JDBC 调用将把连接超时时间设置为 10。
即,如果存在与同一数据库的另一个连接,则应用程序将接收到错误。
对于
CLI:
int i = 10; // 10 seconds timeout
rc = SQLSetConnectAttr(hdbc, SQL_ATTR_LOGIN_TIMEOUT, (SQLPOINTER) i, 0);
对于 JDBC:
int waitTime = 10;
String url = "jdbc:db2e:mysample";
Properties prop = new Properties();
prop.setProperty("LOGIN_TIMEOUT", Integer.toString(waitTime));
Connection con = driver.connect(url,prop);
- 缺省超时时间是 0 秒。
- 多线程应用程序可以使用一个线程连接到数据库,而使用另一线程与数据库断开连接。
- 当应用程序成功地连接到数据库时,将创建名为“DSYLOCK”的文件。
如果应用程序进程异常终止,将自动除去文件 DSYLOCK。
- 限制:连接串行化可能对驻留在网络驱动器上的数据库不起作用。
- 在 JDBC 程序中,如果以属性的形式将超时值传送到 DriverManager.getConnection()
方法,将忽略超时值并将它设置为零。