java.sql.SQLException: не найдено подходящего драйвера для jdbc: microsoft: sqlserver

Я получаю это исключение, когда пытаюсь запустить эту программу. Это один из примеров Microsoft. Я добавил sqljdbc4.jar в путь к классам в netbeans как для компиляции, так и для запуска через свойства проекта. Я также проверил, что класс можно найти с помощью приведенного ниже оператора импорта - во время компиляции ошибок нет, поэтому он должен найти банку.

Может ли это быть связано с dll или некоторой sql dll, на которую ссылается sqldbc4.jar?

Это точное исключение, и ниже приведен точный код, кроме пароля.

Исключение:

run:
java.sql.SQLException: No suitable driver found for jdbc:microsoft:sqlserver://localhost:1433;databaseName=HealthCareDatabase
Error Trace in getConnection() : No suitable driver found for jdbc:microsoft:sqlserver://localhost:1433;databaseName=HealthCareDatabase
Error: No active Connection
    at java.sql.DriverManager.getConnection(DriverManager.java:602)
    at java.sql.DriverManager.getConnection(DriverManager.java:185)
    at javaapplication1.Connect.getConnection(Connect.java:35)
    at javaapplication1.Connect.displayDbProperties(Connect.java:50)
    at javaapplication1.JavaApplication1.main(JavaApplication1.java:23)
BUILD SUCCESSFUL (total time: 1 second)

Код:

 package javaapplication1;
import com.microsoft.sqlserver.jdbc.SQLServerDriver;

import java.*;

public class Connect {

    private java.sql.Connection con = null;
    private final String url = "jdbc:microsoft:sqlserver://";
    private final String serverName = "localhost";
    private final String portNumber = "1433";
    private final String databaseName = "HealthCareDatabase";
    private final String userName = "larry";
    private final String password = "xxxxxxx";

    // Constructor
    public Connect() {
    }

    private String getConnectionUrl() {
        return url + serverName + ":" + portNumber + ";databaseName=" + databaseName ;
    }

    private java.sql.Connection getConnection() {
        try {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            con = java.sql.DriverManager.getConnection(getConnectionUrl(), userName, password);
            if (con != null) {
                System.out.println("Connection Successful!");
            }
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("Error Trace in getConnection() : " + e.getMessage());
        }
        return con;
    }

    public void displayDbProperties() {
        java.sql.DatabaseMetaData dm = null;
        java.sql.ResultSet rs = null;
        try {
            con = this.getConnection();
            if (con != null) {
                dm = con.getMetaData();
                System.out.println("Driver Information");
                System.out.println("\tDriver Name: " + dm.getDriverName());
                System.out.println("\tDriver Version: " + dm.getDriverVersion());
                System.out.println("\nDatabase Information ");
                System.out.println("\tDatabase Name: " + dm.getDatabaseProductName());
                System.out.println("\tDatabase Version: " + dm.getDatabaseProductVersion());
                System.out.println("Avalilable Catalogs ");
                rs = dm.getCatalogs();
                while (rs.next()) {
                    System.out.println("\tcatalog: " + rs.getString(1));
                }
                rs.close();
                rs = null;
                closeConnection();
            } else {
                System.out.println("Error: No active Connection");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        dm = null;
    }

    private void closeConnection() {
        try {
            if (con != null) {
                con.close();
            }
            con = null;
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) throws Exception {
        Connect myDbTest = new Connect();
        myDbTest.displayDbProperties();
    }

}


person Larry Watanabe    schedule 11.04.2011    source источник
comment
привет .. Вы нашли решение для этого? У меня такая же проблема ... пожалуйста, помогите мне   -  person Piraba    schedule 11.11.2011
comment
Чтобы решить указанную выше проблему, проверьте мой простой код ниже ...   -  person Fathah Rehman P    schedule 27.06.2012
comment
Загрузите sqljdbc4.jar и поместите его в библиотеку Jmeter   -  person    schedule 19.02.2013


Ответы (5)


Ваш URL-адрес должен быть jdbc:sqlserver://server:port;DatabaseName=dbname
, а имя класса должно иметь вид com.microsoft.sqlserver.jdbc.SQLServerDriver
Используйте Драйвер JDBC 2.0 для MicrosoftSQL Server

person Piyush Mattoo    schedule 11.04.2011
comment
В этой неразберихе виновата старая версия драйвера. В новой версии упоминается правильный префикс для использования (jdbc: sqlserver: / /). - person László van den Hoek; 19.03.2012
comment
На некоторых сайтах указан неправильный URL. У них есть 'jdbc: microsoft: sqlserver: // server: port; DatabaseName = dbname' вместо 'jdbc: sqlserver: // server: port; DatabaseName = dbname' - person screechOwl; 22.04.2012
comment
Куда поставить драйвер? - person Demodave; 30.12.2015
comment
Мертвая ссылка на драйвер. - person Florian Castelain; 09.03.2020

Ниже приведен простой код для чтения из базы данных SQL. Имена базы данных - «база данных1». Имя таблицы - «table1». Он содержит две колонки «uname» и «pass». Не забудьте добавить в проект sqljdbc4.jar. Загрузить sqljdbc4.jar

public class NewClass {

    public static void main(String[] args) {

        Connection conn = null;
        String dbName = "database1";
        String serverip="192.168.100.100";
        String serverport="1433";
        String url = "jdbc:sqlserver://"+serverip+"\\SQLEXPRESS:"+serverport+";databaseName="+dbName+"";
        Statement stmt = null;
        ResultSet result = null;
        String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
        String databaseUserName = "admin";
        String databasePassword = "root";
        try {
            Class.forName(driver).newInstance();
            conn = DriverManager.getConnection(url, databaseUserName, databasePassword);
            stmt = conn.createStatement();
            result = null;
            String pa,us;
            result = stmt.executeQuery("select * from table1 ");

            while (result.next()) {
                us=result.getString("uname");
                pa = result.getString("pass");              
                System.out.println(us+"  "+pa);
            }

            conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
person Fathah Rehman P    schedule 27.06.2012
comment
@Aniket - пожалуйста, вставьте полное исключение, которое у вас есть - person Fathah Rehman P; 18.07.2013
comment
Я работаю над веб-приложением в netbeans 7.0.1. Исключение похоже: ТЯЖЕЛАЯ: Java Runtime Environment (JRE) версии 1.7 не поддерживается этим драйвером. Используйте библиотеку классов sqljdbc4.jar, которая обеспечивает поддержку JDBC 4.0. СЕРЬЕЗНО: java.lang.UnsupportedOperationException: среда выполнения Java (JRE) версии 1.7 не поддерживается этим драйвером. Используйте библиотеку классов sqljdbc4.jar, которая обеспечивает поддержку JDBC 4.0. - person Aniket; 18.07.2013
comment
@Aniket - вы добавляете sqljdbc4.jar в свой проект? Если вы уже добавили sqljdbc4.jar, убедитесь, что sqljdbc.jar не добавлен в проект. - person Fathah Rehman P; 19.07.2013
comment
У меня это работает. Спасибо. Но я заменил Class.forName (driver) .newInstance (); с DriverManager.registerDriver (новый com.microsoft.sqlserver.jdbc.SQLServerDriver ()); и добавил зависимость com.microsoft.sqlserver в мой pom в Mavin, чтобы он работал - person mcemmy; 03.01.2019

Для тех, кто хочет решить то же самое, используя maven. Добавьте ниже зависимость в POM:

<dependency>
    <groupId>com.microsoft.sqlserver</groupId>
    <artifactId>mssql-jdbc</artifactId>
    <version>7.0.0.jre8</version>
</dependency>

И используйте приведенный ниже код для подключения:

String connectionUrl = "jdbc:sqlserver://localhost:1433;databaseName=master;user=sa;password=your_password";

try {
    System.out.print("Connecting to SQL Server ... ");
    try (Connection connection = DriverManager.getConnection(connectionUrl))        {
        System.out.println("Done.");
    }
} catch (Exception e) {
    System.out.println();
    e.printStackTrace();
}

Найдите это ссылка для других типов запросов CRUD.

person Shams    schedule 31.08.2018
comment
Потрясающе ... Для приложений с java 8 это подходящий драйвер. а не 8.2.2.jre11, из-за которого у меня были проблемы с подключением. - person Jyotirmay; 28.04.2020

У меня была такая же ошибка, но была правильная строка подключения. Моя проблема заключалась в том, что драйвер не использовался, поэтому был оптимизирован из скомпилированной войны.

Обязательно импортируйте драйвер:

import com.microsoft.sqlserver.jdbc.SQLServerDriver;

А затем, чтобы заставить его включиться в финальную войну, вы можете сделать что-то вроде этого:

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

Эта строка находится в исходном вопросе. Это также будет работать:

SQLServerDriver driver = new SQLServerDriver();
person JeffryHouser    schedule 28.12.2017

Вы можете попробовать, как показано ниже, с sqljdbc4-2.0.jar:

 public void getConnection() throws ClassNotFoundException, SQLException, IllegalAccessException, InstantiationException {
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
        String url = "jdbc:sqlserver://<SERVER_IP>:<PORT_NO>;databaseName=" + DATABASE_NAME;
        Connection conn = DriverManager.getConnection(url, USERNAME, PASSWORD);
        System.out.println("DB Connection started");
        Statement sta = conn.createStatement();
        String Sql = "select * from TABLE_NAME";
        ResultSet rs = sta.executeQuery(Sql);
        while (rs.next()) {
            System.out.println(rs.getString("COLUMN_NAME"));
        }
    }
person shivam srivastava    schedule 26.07.2017