为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:达梦8
【操作系统】:任意系统
【CPU】:任意cpu
【问题描述】*:当使用达梦jdbc连接数据库时,如果schema不存在则会引起连接泄露(jdbc已经创建了跟达梦的连接,但是应用拿不到连接,导致连接泄露)。
复现步骤:
一、先创建一个用户user1。
二、使用user1用户连接数据库,连接的schema为uim,这个uim在达梦数据库里不存在(先不管什么原因没有这个schema)
循环建立5个连接,查询达梦数据库显示已经创建了5个连接(使用sql:select * from SYS."V$SESSIONS";),但是测试程序并不能获取到创建的连接进行管理。
直接上测试代码:
public static void main(String[] args) throws ClassNotFoundException, SQLException, InterruptedException {
String url="jdbc:dm://localhost:5236/user1?schema=abc";
Class.forName("dm.jdbc.driver.DmDriver");
List<DmdbConnection> connectionList=new ArrayList<DmdbConnection>();
for (int i = 0; i < 5; i++) {
try {
DmdbConnection connection = (DmdbConnection) DriverManager.getConnection(url, "user1", "123456789");
System.out.println("connection="+connection);
connectionList.add(connection);
} catch (SQLException e) {
e.printStackTrace();
}
}
connectionList.forEach(c->c.close());
Thread.sleep(100*1000);
}
不是很明白程序里面如何体现你文字想表达的意思。是否是当创建了100个连接后,无法通过connectionList中的对象进行close呢?