3

出色地。我最近才得出关于这个的结论。我们访问数据库有时间限制吗?准确的说是通过Java的JDBC和MySQL提供的驱动访问MySQL数据库?

为了更准确地了解发生了什么,我给你更多细节:

所以我得到了一个实际上提供 RESTful Web 服务的网站,它也支持 Kitty-Cache 进行缓存,因为一些计算成本很高。我运行这个项目,我从浏览器访问了所有的 api 地址,一切都很好。

奇怪的是我没关机的时候,今天又访问了,和数据库(MySQL)有关系的地址刚刚报错,内部服务器报错,而且报错是NullPointerException在不应该出现的地方引起的发生。我停止了项目,再次运行它,访问相同的地址,它显示了数据。

有时间限制吗?我们如何刷新数据库连接?我想我会尝试重新连接它,但我不确定如何。

代码:

java.sql.Connection conn = null;

try {
   Class.forName("com.mysql.jdbc.Driver");
   String conStr = 
       "jdbc:mysql://" + this.dbHostname +
       ":" + this.dbPort + "/" + this.dbName;
   conn = DriverManager.getConnection(conStr, this.dbUsername, this.dbPassword);
   this.isConnectingSuccess = true;
} catch (ClassNotFoundException cnfe) {
   throw new IllegalDbCmdExecution(cnfe.getMessage());
} catch (SQLException sqle) {
   throw new IllegalDbCmdExecution(sqle.getMessage());
}
4

2 回答 2

0

出色地。我设法解决了这个问题。我所做的是,以前当我想查询数据库时,我调用了 execute() 方法。现在,execute() 方法是最终方法:

public final void execute() {
  preExecuting();
  executing();
  postExecuting();
}

然后我将 preExecuting 和 postExecuting 声明为 void 方法,当然,也可以重写:

public void preExecuting() { }
public void postExecuting() { }

然后作为抽象方法执行,因此必须实现此方法:

public abstract void executing();

所以,稍后我需要对执行做一些事情,这实际上是将之前在 execute() 中的代码剪切到这个执行方法中。在进一步的课程中,我使用代码覆盖 preExecuting 以通过执行“SELECT 1”来测试连接并测试它是否引发 SQLException。如果是,那么我需要重新建立连接。

就如此容易。:)

于 2013-08-24T03:31:34.927 回答
-1

检查 my.ini 的wait_timeout参数并检查 interactive_timeout

于 2013-08-23T04:36:11.840 回答