我在这里有一个基本问题 - 我正在使用一个名为XpressMP
.
我编写了一个多线程程序来将大量记录插入数据库。在连接数据库时,我注意到一件最重要的事情:
在我的程序中,如果我使用类似下面的东西 -
class Task implements Runnable {
private Connection dbConnection = null;
private PreparedStatement preparedStatement = null;
//other stuff
@Override
public void run() {
try {
dbConnection = getDBConnection();
} finally {
if (preparedStatement != null) {
try {
preparedStatement.close();
preparedStatement = null;
} catch (SQLException e) {
}
}
if (dbConnection != null) {
try {
dbConnection.close();
dbConnection = null;
} catch (SQLException e) {
}
}
}
}
}
它工作正常,我正在关闭最后一个块中的每个连接。而且我可以在数据库中插入更多行。
但是,一旦我开始有意地(我不应该这样做)使用多个线程的静态连接-
class Task implements Runnable {
private static Connection dbConnection = null;
private static PreparedStatement preparedStatement = null;
//other stuff
@Override
public void run() {
try {
dbConnection = getDBConnection();
} finally {
if (preparedStatement != null) {
try {
preparedStatement.close();
preparedStatement = null;
} catch (SQLException e) {
}
}
if (dbConnection != null) {
try {
dbConnection.close();
dbConnection = null;
} catch (SQLException e) {
}
}
}
}
}
整个数据库挂起。在重新启动数据库之前,我无法使用该数据库。所以这意味着我的 JDBC 驱动程序存在一些问题。我已经将这个问题告诉了 DBA,他们正在与拥有该数据库的人交谈。
但我的问题是它为什么会挂起。是什么原因?