使用JDBC的SQL Server连接 - JTDS

时间:2014-08-13 12:24:19

标签: java sql-server jdbc jtds

我使用JTDS驱动程序与SQL Server进行通信,而且我无法管理连接丢失。我无法检查连接是否被丢弃。我将详细说明我的问题:

这是我创建连接的方法:

public synchronized Connection NewConnection (ConnectionParameters params) {
         try {
             String url = "";
             if (params.getTipoBanco (). equals ("MySQL")) {
                 if (! mySqlDriverLoaded)
                     return null;
                 url = "jdbc:mysql://"+params.getIpServidor()+":"+params.getPorta()+"/"+params.getNomeBanco()+"?user="+params.getUsuario()+"&password="+params.getSenha();
             } else if (params.getTipoBanco (). equals ("SQL Server")) {
                 if (! sqlServerDriverLoaded)
                     return null;
                 url = "jdbc:jtds:sqlserver://"+params.getIpServidor()+":"+params.getPorta()+"/"+params.getNomeBanco()+";user="+params.getUsuario()+";password="+params.getSenha();
             } else {
                 throw new IllegalArgumentException("Type of database invalid data");
             }
             return DriverManager.getConnection(url);
         } Catch (Exception e) {
             e.printStackTrace ();
             message = "Error in connection:" + e.getMessage ();
             return null;
         }
     }

如果服务器在创建连接时处于脱机状态,则可以检查,因为将抛出SQLException。问题在于成功执行连接后丢弃:

Connection connSqlserver = ConnectionFactory.getInstance().newConnection(paramSqlserver);
PreparedStatement stSqlServer = connSqlserver.prepareStatement("select * from operator");
ResultSet rsSqlserver = stSqlserver.executeQuery();

如果在executeQuery()之前或期间删除了连接,则应用程序会在期望连接返回的方法中被锁定。没有例外。

我尝试使用以下方法验证连接丢失:

1

DriverManager.setLoginTimeout(x);

2

statement.setQueryTimeout(x);

3 loginTimeout =连接字符串中的x参数

这些都没有成功。

如果你能给我一些指导,将不胜感激。

谢谢!

1 个答案:

答案 0 :(得分:1)

仅供参考,LoginTimeout设置您等待建立连接的时间。连接后它没有任何效果。看起来jTDS驱动器实现了socketTimeout,我认为应该覆盖你的情况。

他们还实施了socketKeepAlive。我不熟悉他们如何实现它但我假设轮询连接要么保持打开和\或如果它被删除则返回异常。我不认为jTDS提供此功能,但某些连接故障转移功能也可能有用。

A summary of one implementation