使用Java中的SQL驱动程序连接到远程SQL Server

使用Java中的SQL驱动程序连接到远程SQL Server,java,sql,sql-server,jdbc,dsn,Java,Sql,Sql Server,Jdbc,Dsn,主要注意事项: 使用SQLServer2005 使用JDK1.8 JDK1.8不再支持JDBC-ODBC网桥 我的库中有Microsoft SQLJDBC 4.0和6.2 我尝试用Java连接远程SQL Server已有相当一段时间了,但仍然无法连接。我希望使用我创建的DSN进行连接。JDK1.8使用的新驱动程序需要一个我在下面创建的连接URL。下面代码中的所有内容看起来都是正确的。但我仍然得到了错误: 严重:此驱动程序不支持Java运行时环境(JRE)1.8版。使用sqljdbc4.jar

主要注意事项:

  • 使用SQLServer2005
  • 使用JDK1.8
  • JDK1.8不再支持JDBC-ODBC网桥
  • 我的库中有Microsoft SQLJDBC 4.0和6.2
我尝试用Java连接远程SQL Server已有相当一段时间了,但仍然无法连接。我希望使用我创建的DSN进行连接。JDK1.8使用的新驱动程序需要一个我在下面创建的连接URL。下面代码中的所有内容看起来都是正确的。但我仍然得到了错误:

严重:此驱动程序不支持Java运行时环境(JRE)1.8版。使用sqljdbc4.jar类库,它提供对JDBC4.0的支持。 java.lang.UnsupportedOperationException:此驱动程序不支持java运行时环境(JRE)1.8版。
使用sqljdbc4.jar类库,它提供对JDBC4.0的支持

这是我的密码:

String connectionUrl = "jdbc:sqlserver://InterfaceDSN" +  
    "databaseName=DB_Local;Trusted_Connection=True;integratedSecurity=true";  

    // Declare the JDBC objects.  
    Connection con = null;  
    Statement stmt = null;  
    ResultSet rs = null;  

    try 
    {
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");  
        con = DriverManager.getConnection(connectionUrl);  

        String SQL = "SELECT TOP 10 * FROM Person.Contact";  
        stmt = con.createStatement();  
        rs = stmt.executeQuery(SQL);

        while (rs.next()) {  
          System.out.println(rs.getString(4) + " " + rs.getString(6));  
        }  
    }catch (Exception e) 
    {  
        e.printStackTrace();  
    }
总结如下: 知道我拥有什么和需要什么,是否有其他方法连接到数据库,考虑到我正在使用JDK1.8和SQLServer2005,这里的选项已经用完了

从针对SQL Server的Microsoft JDBC驱动程序4.2 Sun Java开始 SE开发工具包(JDK)8.0和Java

您可以在找到JDBC驱动程序需求的地方阅读它

因此,您必须至少将JDBC驱动程序更新到V4.2。这一点很清楚。

发生了什么 正如信息所说:

java.lang.UnsupportedOperationException: Java Runtime Environment (JRE) version 1.8 is not supported by this driver.
Use the sqljdbc4.jar class library, which provides support for JDBC 4.0.
这是因为JDBC4.0有很多更改,这意味着您需要使用更新版本的驱动程序。不能在新版本上运行旧驱动程序

如何修复它 仅使用6.2或版本应该可以解决此问题

额外信息 在JDBC4.0(Java1.6+)之后,您不需要下面的代码


我的图书馆里有两个司机,你不应该。去掉旧版本,只保留与Java8兼容的版本。在任何情况下,您都应该有一个版本为4.2或更高版本的驱动程序。我收到了以下错误:
com.microsoft.sqlserver.jdbc.SQLServerException:与主机接口的TCP/IP连接sndatabasename=TTBOM,端口1433失败。错误:“null。请验证连接属性。确保SQL Server实例正在主机上运行,并在端口接受TCP/IP连接。确保到端口的TCP连接未被防火墙阻止。”
但我知道DSN可以工作,因为我可以在Microsoft Access中使用相同的DSN。您有两个版本,并且正在使用Class.forName强制加载,这会导致问题,只有使用新的(不强制加载)才能修复itI。我已收到此错误:
com.microsoft.sqlserver.jdbc.SQLServerException:与主机接口的TCP/IP连接sndatabasename=TTBOM,端口1433已失败。错误:“null。请验证连接属性。确保SQL Server实例正在主机上运行,并且在端口接受TCP/IP连接。确保到端口的TCP连接未被防火墙阻止。”
但我知道DSN是有效的,因为我可以在Microsoft Access中使用相同的DSN。您可以使用wireshark之类的工具来监视连接并查看发生了什么情况吗?在数据库之前是否缺少分号?看见而且,关键字也不一样。不要简单地为JDBC参数携带ODBC参数。
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");