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

Java 我们访问数据库有时间限制吗?,java,jdbc,Java,Jdbc,嗯。我最近才得出这个结论。我们访问数据库有时间限制吗?确切地说,MySQL数据库是通过Java的JDBC和MySQL提供的驱动程序访问的 为了更准确地了解发生了什么,我将向您提供更多详细信息: 所以我得到了一个提供RESTfulWebService的网站,它也支持KittyCache进行缓存,因为一些计算代价很高。我运行项目,从浏览器访问所有api地址,一切正常 奇怪的是,当我没有关闭我的计算机,今天我再次访问,与数据库(MySQL)有关的地址只是一个错误,内部服务器错误,错误是由NullPoi

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

为了更准确地了解发生了什么,我将向您提供更多详细信息:

所以我得到了一个提供RESTfulWebService的网站,它也支持KittyCache进行缓存,因为一些计算代价很高。我运行项目,从浏览器访问所有api地址,一切正常

奇怪的是,当我没有关闭我的计算机,今天我再次访问,与数据库(MySQL)有关的地址只是一个错误,内部服务器错误,错误是由NullPointerException在一个不应该发生的地方引起的。我停止了项目,再次运行它,访问相同的地址,它显示了数据

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

代码:


检查my.ini的参数,并检查交互式超时。我设法解决了这个问题。我要做的是,以前当我想查询数据库时,我调用execute()方法。现在,execute()方法是最后一个方法:

public final void execute() {
  preExecuting();
  executing();
  postExecuting();
}
然后我将预执行和后执行声明为void方法,当然,可以重写:

public void preExecuting() { }
public void postExecuting() { }
然后作为抽象方法执行,因此,必须实现此方法:

public abstract void executing();
所以,稍后我需要对executing做一些事情,这实际上是将先前execute()中的代码剪切到这个执行方法中。在下一个类中,我使用代码覆盖预执行,通过执行“选择1”测试连接,并测试它是否抛出SQLException。如果是,那么我需要重新建立连接


就这么简单。:)

您能给我们看一些代码,或者至少是jdbc语句吗?请阅读有关jdbc的autoReconnect和wait_timeout属性。将autoReconnect设置为true和/或将wait_timeout从默认值8小时增加到更多应该会有所帮助。这还与您连接数据库的方式有关。但是,是的,我会怀疑非活动连接有一个超时。我读到关于autoReconnect的文章,我对使用它不感兴趣。。。我想手动设置连接,而不是。但是怎么做呢?顺便说一句@Shishir,对于autoReconnect,这意味着您必须附加URL并具有类似jdbc的内容:mysql://localhost:3306/sakila?profileSQL=true&autoReconnect=true,是吗?我不想修改任何默认值,我想我更喜欢保留8小时。只有当存在SQL请求且未连接时,我才希望手动重新建立连接。使用
计时器
线程
检查
con==null
。如果为
null
,则重新建立连接。
public abstract void executing();