使用 JDBC 的 SQL Server 连接 - JTDS

Posted

技术标签:

【中文标题】使用 JDBC 的 SQL Server 连接 - JTDS【英文标题】:SQL Server connection using JDBC - JTDS 【发布时间】:2014-08-13 12:24:19 【问题描述】:

我正在使用 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】:

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

他们还实现了socketKeepAlive。我不熟悉他们如何实现它,但我假设轮询连接以使其保持打开状态和\或在它被丢弃时返回异常。我不认为jTDS 提供此功能,但某些连接故障转移功能也可能有用。

A summary of one implementation

【讨论】:

谢谢!我已将“socketTimeout=5”放入连接字符串中,它对我来说可以正常工作! 优秀。我很高兴这有帮助。

以上是关于使用 JDBC 的 SQL Server 连接 - JTDS的主要内容,如果未能解决你的问题,请参考以下文章

怎么使用JDBC连接SQL Server2008

怎么使用JDBC连接SQL Server

使用JDBC连接android到SQL Server的正确方法

Java Spring jdbc sql server连接错误

jdbc连接sql Server 数据库时用的数据库名是指实例名吗?

JDBC如何连接SQL Server数据库实现增删改查