我们访问数据库时有时间限制吗?

时间:2013-08-23 04:27:49

标签: java jdbc

好。我最近才对这一个做出结论。我们访问数据库时有时间限制吗?确切地说,MySQL数据库是通过Java提供的JDBC和驱动程序访问的吗?

为了更准确地了解发生的事情,我会向您提供更多详细信息:

所以我有一个实际上提供RESTful webservice的网站,它也支持使用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());
}

2 个答案:

答案 0 :(得分: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。如果是,那么我需要重新建立连接。

就这么简单。 :)

答案 1 :(得分:-1)

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