将 JDBC 与 SQL Server 连接

Posted

技术标签:

【中文标题】将 JDBC 与 SQL Server 连接【英文标题】:Connect JDBC with SQL Server 【发布时间】:2012-12-18 09:37:20 【问题描述】:

我正在尝试将我的 JAVA 代码连接到我在本地拥有的 SQL Server。这就是我想要做的:

     public static void main(String[] args) throws ClassNotFoundException, SQLException, InvalidFormatException, IOException  

         Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");    
         con = DriverManager.getConnection("jdbc:sqlserver://localhost" + "databaseName=talisman" + "user=karim" + "password=123"); 

//rest of the code

我遇到了这个异常:

    Dec 18, 2012 11:29:40 AM com.microsoft.sqlserver.jdbc.SQLServerConnection <init>
SEVERE: Java Runtime Environment (JRE) version 1.6 is not supported by this driver. Use the sqljdbc4.jar class library, which provides support for JDBC 4.0.
Exception in thread "main" java.lang.UnsupportedOperationException: Java Runtime Environment (JRE) version 1.6 is not supported by this driver. Use the sqljdbc4.jar class library, which provides support for JDBC 4.0.
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.<init>(SQLServerConnection.java:304)
    at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1011)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at cct.karim.karim.main(karim.java:62)

而且我很困... 感谢您的帮助,但请在您的回答中具体说明

更新:

我正在使用 eclipse,我下载了 jbdc4 。你能告诉我如何将它包含在eclipse中吗?

【问题讨论】:

此驱动程序不支持 Java 运行时环境 (JRE) 版本 1.6。您的 jdbc 驱动程序版本是什么? 错误信息很清楚。您要么需要使用 Java7,要么需要使用 Java6 的 Microsoft 驱动程序 我不确定您是否是 Java 新手,但学习阅读堆栈跟踪是一项重要技能。该堆栈跟踪非常清楚地表明您的驱动程序与您的 Java 版本不兼容。一些堆栈跟踪很长且令人生畏,阅读它们会带来好处。 如何更新我的 java 版本?还是不推荐? 【参考方案1】:

您也可以尝试通过下面提到的方式将 JAVA 代码本地连接到 SQL Server。

你需要有 Microsoft SQL Server JDBC 驱动程序 SQL JDBC 认证文件

认证后你 下载认证文件后将此文件复制到window的system32文件夹。现在为 SQL Server JDBC 驱动程序(jar 文件)设置类路径。现在假设你有一个数据库 mssmit ,用户名和密码是 sumit。你也可以通过widows认证连接SQL Server,如果你想用windows认证连接可以使用下面的代码。

Connection con=DriverManager.getConnection("jdbc:sqlserver://localhost;databaseName=mssumit;integratedSecurity=true");
Connection conn =DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=mssumit;user=sumit;password=sumit;");

有时您可能无法使用用户名进行连接,在这种情况下,请检查您能够使用 SQL Server 身份验证连接的数据库连接属性。使用以下代码实例化 SQL Server 驱动程序类

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
Connection conn=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=mssumit;user=sumit;password=sumit;");

详细解释、过程和源码可以查看这个链接http://compilr.org/java/jdbc-connection-with-ms-sql-server-in-java/

【讨论】:

【参考方案2】:

尝试jtds 驱动程序,这是 MS SQL 的替代驱动程序。有关如何正确使用驱动程序的更多信息,请阅读Getting started。

【讨论】:

我下载了它,如何将它包含在 eclipse 中,它与 jdbc4 有何不同? 您可以在“属性 > Java 构建路径 > 库”下将 jar 添加到您的项目中。 jtds 驱动程序支持所有版本的 MS SQL Server,所以你的问题应该没有了。这个驱动程序的问题要少得多。 您是否删除了其他驱动程序并更改了驱动程序的类名?尝试“net.sourceforge.jtds.jdbc.Driver”而不是“com.microsoft.sqlserver.jdbc.SQLServerDriver”。 现在又遇到了一个异常: 线程“main”中的异常 java.lang.UnsupportedClassVersionError: net/sourceforge/jtds/jdbc/Driver : java.lang.ClassLoader.defineClass1(Native Method) 的 java.lang.ClassLoader.defineClass1(Native Method) 中不受支持的 major.minor 51.0 版.lang.ClassLoader.defineClassCond(Unknown Source) at java.lang.ClassLoader.defineClass(Unknown Source) at java.security.SecureClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.defineClass(Unknown Source) at java.net .URLClassLoader.access$000(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method)【参考方案3】:

阅读异常消息,您会发现您正在使用不支持 Java 1.6 的旧 JDBC 驱动程序。

您应该从here 获得使用 JDBC 4.0 (sqljdbc4.jar) 的新版本

【讨论】:

【参考方案4】:

您的运行环境使用 jre 1.6,而您使用的 sql jar 与 java 6 不兼容。请改为包含 sqljdbc4.jar。

【讨论】:

【参考方案5】:

希望这个帖子对您有所帮助 - How do I connect to a SQL Server 2008 database using JDBC?。

本质上,有几种使用 JDBC 的方法 - 使用 Windows 身份验证和 SQL 身份验证。 SQL 身份验证可能是最简单的。你可以做的是:

String userName = "username";
String password = "password";

String url = "jdbc:sqlserver://MYPC\\SQLEXPRESS;databaseName=MYDB";

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection conn = DriverManager.getConnection(url, userName, password);

将 sqljdbc4.jar 添加到构建路径后。

对于 Window 身份验证,您可以执行以下操作:

String url = "jdbc:sqlserver://MYPC\\SQLEXPRESS;databaseName=MYDB;integratedSecurity=true";
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection conn = DriverManager.getConnection(url);

然后将 sqljdbc_auth.dll 的路径添加为 VM 参数(在构建路径中仍然需要 sqljdbc4.jar)。

如果您需要更多详细信息,请查看here 以获得简短的分步指南,该指南展示了如何使用 jTDS 从 Java 连接到 SQL Server,并使用 eclipse 使用 JDBC。希望对您有所帮助!

【讨论】:

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

Glassfish“连接已关闭”错误与连接池、JDBC 和 SQL Server 2008

与 SQL Server 的 JDBC 连接:用户 x 登录失败 [重复]

与 sql server 2014 的无效对象名称 jdbc 连接

JDBC无法与SQL Server建立SSL连接(Domino Java Agent FP 9)

将java与sql server 2017连接时出错

Pentaho 数据集成:与 MS SQL Server 的 jdbc 连接不起作用