简体   繁体   中英

Unable to connect to SQL Server via JDBC. No suitable driver found for jdbc:sqlserver://

I simply want to use SQL Server database in my HTTP Servlet program but my program can't seem to connect to the database. It gives me the following error:

No suitable driver found for jdbc:sqlserver://localhost:1433;databaseName=Bookyard;integratedSecurity=true;

This is my connection method.

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;
    }

}

I had the sever name as localhost:1433 earlier but I changed it to the SQL Server instance name (LocalDb)\\\\MSSQLLocalDB:1433 but it still seems to pick up the old name.

Also, I am not sure how to provide the right connection string when connecting to SQL Server localdb.

I am using Eclipse for Java EE, Mars 2, and I downloaded Microsoft JDBC drivers for SQL 6.0 from this website .

I ran the installation, unzipped the contents of the resulting folder. Then, I added the sqljdbc42.jar file to the build path as I am targeting JDK 1.8.

在此处输入图片说明

UPDATE

Upon Scary Wombat's suggestion, I have also added the path to the sqljdbc42.jar file to my classpath.

在此处输入图片说明

However, I still get the same error.

I am pretty confident this is a reflection issue, in that the type loader isn't able to resolve the driver type from my connection string. Which means, the connection string syntax I am using is wrong.

I changed my connection string to read as follows:

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

However, I still not only get the same error but the exception message I receive still has my old connection string . So, clearly, there's also some caching going on, I just don't know where. Who is caching my connection string and how do I refresh / clear that cache?

Could you please tell me how to provide a SQL Server instance name if I am connecting to localdb and not on the main SQL Server instance?

As @ScaryWombat and @JozefChocholacek had hinted, it turned out to be a class path issue. Apparently, you have to copy and paste just the sqljdbc42.jar file, and this file only directly into the WEB-INF\\lib folder and not within any sub-folder.

I did that it still gave me that error.

That was because the WEB-INF folder structure, when I viewed it in the Project Explorer , still had the old folder structure. So, I right-clicked on the WEB-INF folder in the Project Explorer and selected the Refresh command.

I also updated my environmental variable CLASSPATH to point it to the WEB-INF folder and that error went away.

Just try by adding username and password,it works for me,

Connection con=DriverManager.getConnection("jdbc:sqlserver://10.100.10.100:1433;databaseName=DB","username","password");


Hope it may works.

you can do like below

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);

note :however its not necceaary for new version of jdbc driver to load driver class manually using class.forname

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM