有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java无法通过JDBC连接到SQL Server。未找到适合jdbc:sqlserver://

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

No suitable driver found for jdbc:sqlserver://localhost: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下载了Microsoft JDBC驱动程序for SQL 6.0

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

enter image description here

更新

根据Thrarry 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实例名称吗


共 (1) 个答案

  1. # 1 楼答案

    你可以像下面这样做

    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驱动程序并不需要使用类手动加载驱动程序类。福奈姆