java - 大约 10-20 分钟不活动后,与 mysql 服务器的 JDBC 连接失败

标签 java mysql jdbc

正如我在标题中所说,我与 mysql 服务器的 JDBC 连接在大约 10-20 分钟的不活动后失败。我使用以下代码连接到数据库:

import java.io.FileOutputStream;
import java.io.OutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.swing.*;

import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.UserInfo;

public class MyDB
{
    public Connection connect = null;
    public Statement statement = null;
    public PreparedStatement preparedStatement = null;
    public ResultSet resultSet = null;

    public void readDatabase() throws Exception
    {
        JSch jsch = new JSch();
        String host = "ssh.binero.se";
        String user = "username";
        Session session = jsch.getSession(user, host, 22);
        int lport = 1234;
        String rhost = "Ip_to_host";
        int rport = 3306;
        UserInfo ui = new MyUserInfo();
        session.setUserInfo(ui);
        session.connect();

        int assigned_port = session.setPortForwardingL(lport, rhost, rport);
        System.out.println("localhost:" + assigned_port + " -> " + rhost + ":" + rport);
        Class.forName("com.mysql.jdbc.Driver");
        connect = DriverManager
            .getConnection("jdbc:mysql://localhost:1234/database?
            user=user&password=pass&connectTimeout=28800000");

这工作正常,但在大约 10-20 分钟不活动后,当我尝试使用数据库连接时收到以下错误消息:

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet successfully received from the server was 6 810 583 milliseconds ago.
The last packet sent successfully to the server was 6 810 800 milliseconds ago.

...

Caused by: java.net.SocketException: Software caused connection abort: socket write error

我知道我可以通过在每次查询后断开与数据库的连接来解决这个问题,但我不想这样做。另外,由于我在一段时间后与数据库断开连接,我以为我超时了。但是,当我更改它们时,我没有发现任何有用的变量。

最佳答案

       Class.forName("com.mysql.jdbc.Driver");
       con = DriverManager.getConnection("jdbc:mysql://localhost:3306/Table_Name","root","");

试试这个,我从来没有超时过!祝你好运...!

关于java - 大约 10-20 分钟不活动后,与 mysql 服务器的 JDBC 连接失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11429988/

相关文章:

php、mysql、数组 - if( x == 0 ) { }

mysql - JOIN 不以可预测的方式使用索引

java - MS SQL Server 2008 的 JDBC 连接异常

java - 无法使用 getImportedKeys() 或 getExportedKeys() 获取外键,只有 getPrimaryKeys() 有效

java - 表单值未提交到 servlet

java - 异常启动过滤器 Struts 2

java - 无法从 HashMap 类型对非静态方法 keySet() 进行静态引用

sql - 这个查询有什么问题?

java - 从数据库检索时组合框中没有数据

Java 客户端和 Erlang 服务器?