无法通过JDBC连接到SQL Server。找不到合适的jdbc驱动程序:sqlserver://

时间:2016-08-30 05:15:19

标签: java sql-server eclipse tomcat jdbc

我只想在我的HTTP Servlet程序中使用SQL Server数据库,但我的程序似乎无法连接到数据库。它给了我以下错误:

  

找不到合适的驱动程序   JDBC:SQLSERVER://本地主机:1433;的databaseName = Bookyard; integratedSecurity = TRUE;

这是我的连接方法。

package practice.bookyard.server.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class Database {

    public static Connection getConnection() {
        String url = "jdbc:sqlserver://(LocalDb)\\MSSQLLocalDB:1433;databaseName=Bookyard;integratedSecurity=true;";
        Connection connection = null;

        try {
            connection = DriverManager.getConnection(url);
        } catch (SQLException e) {
            e.printStackTrace();
        }

        return connection;
    }

}

之前我的服务器名称为localhost:1433,但我将其更改为SQL Server实例名称(LocalDb)\\MSSQLLocalDB:1433,但它似乎仍然选择旧名称。

另外,我不确定在连接到SQL Server localdb时如何提供正确的连接字符串。

我正在使用Eclipse for Java EE,Mars 2,我从this website下载了用于SQL 6.0的Microsoft JDBC驱动程序。

我运行了安装,解压缩了生成的文件夹的内容。然后,我将 sqljdbc42.jar 文件添加到构建路径,因为我的目标是JDK 1.8。

enter image description here

更新

根据Scary Wombat的建议,我还将 sqljdbc42.jar 文件的路径添加到我的类路径中。

enter image description here

然而,我仍然得到同样的错误。

我非常有信心这是一个反射问题,因为类型加载器无法从我的连接字符串中解析驱动程序类型。这意味着,我使用的连接字符串语法是错误的。

我将连接字符串更改为如下所示:

String url = "jdbc:sqlserver://localhost:1433;
instance=(LocalDb)\\MSSQLLocalDB;
databaseName=Bookyard;integratedSecurity=true;";

然而,我仍然不仅得到相同的错误,但我收到的异常消息仍然有我的旧连接字符串。所以,显然,还有一些缓存,我只是不知道在哪里。谁在缓存我的连接字符串,如何刷新/清除该缓存?

如果我连接到 localdb 而不是主SQL Server实例,请告诉我如何提供SQL Server实例名称?

3 个答案:

答案 0 :(得分:0)

正如@ScaryWombat和@JozefChocholacek暗示的那样,它原来是一个类路径问题。显然,您必须仅复制并粘贴 sqljdbc42.jar 文件,并且此文件只能直接复制并粘贴到WEB-INF\lib文件夹中,而不能复制到任何子文件夹中。

我这样做了它仍然给了我这个错误。

那是因为WEB-INF文件夹结构,当我在Project Explorer中查看时,仍然具有旧的文件夹结构。因此,我右键单击WEB-INF中的Project Explorer文件夹并选择了Refresh命令。

我还更新了我的环境变量CLASSPATH,将其指向WEB-INF文件夹,该错误消失了。

答案 1 :(得分:-1)

尝试添加用户名和密码,它适用于我,

Connection con=DriverManager.getConnection("jdbc:sqlserver://10.100.10.100:1433;databaseName=DB","username","password");
希望它可能有用。

答案 2 :(得分:-2)

你可以这样做

String url = "jdbc:sqlserver://YOUR PC NAME;instanceName=SQLEXPRESS;DatabaseName=dbname;integratedSecurity=true";

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection myCon = DriverManager.getConnection(url);

注意:然而,对于新版本的jdbc驱动程序来说,使用class.forname

手动加载驱动程序类并不是必需的