java.sql.SQLException:找不到适合 jdbc:microsoft:sqlserver 的驱动程序
Posted
技术标签:
【中文标题】java.sql.SQLException:找不到适合 jdbc:microsoft:sqlserver 的驱动程序【英文标题】:java.sql.SQLException: No suitable driver found for jdbc:microsoft:sqlserver 【发布时间】:2011-08-02 18:43:08 【问题描述】:我在尝试运行此程序时遇到此异常。这是微软的例子之一。我已通过项目属性将 sqljdbc4.jar 添加到 netbeans 中的类路径中,以进行编译和运行。我还测试了可以通过使用下面的导入语句找到该类 - 编译期间没有错误,所以它必须找到 jar。
它可能与 sqldbc4.jar 引用的 dll 或某些 sql dll 有关吗?
这是确切的例外,下面是确切的代码,除了密码。
例外:
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();
【问题讨论】:
嗨 .. 你得到这个解决方案了吗?我也面临同样的问题..请帮助我 要解决上述问题,请查看下面的简单代码... 请下载sqljdbc4.jar并放入Jmeter的lib中 【参考方案1】:你的网址应该是jdbc:sqlserver://server:port;DatabaseName=dbname
和类名应该像com.microsoft.sqlserver.jdbc.SQLServerDriver
使用MicrosoftSQL Server JDBC Driver 2.0
【讨论】:
司机的old version 是造成混乱的罪魁祸首。 new version 确实提到了要使用的正确前缀 (jdbc:sqlserver://)。 一堆网站的网址错误。他们有 'jdbc:microsoft:sqlserver://server:port;DatabaseName=dbname ' 而不是 'jdbc:sqlserver://server:port;DatabaseName=dbname ' 你应该把驱动放在哪里? 驱动程序的死链接。【参考方案2】:以下是从 SQL 数据库读取的简单代码。 数据库名称是“database1”。 表名是“table1”。 它包含两列“uname”和“pass”。 不要忘记将“sqljdbc4.jar”添加到您的项目中。 Download 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();
【讨论】:
@Aniket - 请粘贴您得到的完整异常 我正在使用 netbeans 7.0.1 中的 Web 应用程序 异常如下:严重:此驱动程序不支持 Java 运行时环境 (JRE) 版本 1.7。使用为 JDBC 4.0 提供支持的 sqljdbc4.jar 类库。严重:java.lang.UnsupportedOperationException:此驱动程序不支持 Java 运行时环境 (JRE) 1.7 版。使用 sqljdbc4.jar 类库,它提供对 JDBC 4.0 的支持。 @Aniket - 您将 sqljdbc4.jar 添加到您的项目中吗?如果你已经添加了 sqljdbc4.jar,那么请确保 sqljdbc.jar 没有添加到项目中 这对我有用。谢谢。但是我替换了 Class.forName(driver).newInstance();与 DriverManager.registerDriver(new com.microsoft.sqlserver.jdbc.SQLServerDriver());并在 Mavin 的 pom 中添加了依赖项“com.microsoft.sqlserver”以使其正常工作【参考方案3】:对于希望通过使用 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();
查找 this 链接以获取其他 CRUD 类型的查询。
【讨论】:
Awesome... 对于使用 java 8 的应用程序,这是合适的驱动程序。不是 8.2.2.jre11,它给我带来了很多连接问题。【参考方案4】:我遇到了同样的错误,但有一个正确的连接字符串。我的问题是驱动程序没有被使用,因此在编译后的战争中进行了优化。
一定要导入驱动:
import com.microsoft.sqlserver.jdbc.SQLServerDriver;
然后要强制它被包含在最终战争中,你可以这样做:
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
该行在原始问题中。这也可以:
SQLServerDriver driver = new SQLServerDriver();
【讨论】:
【参考方案5】:您可以使用 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"));
【讨论】:
以上是关于java.sql.SQLException:找不到适合 jdbc:microsoft:sqlserver 的驱动程序的主要内容,如果未能解决你的问题,请参考以下文章
H2 java.sql.SQLException:找不到合适的驱动程序
java.sql.SQLException:找不到适合 jdbc:microsoft:sqlserver 的驱动程序
java.sql.SQLException:找不到适合 jdbc 的驱动程序:mysql://localhost:3306/dbname [重复]
java.sql.SQLException:将 Spark 数据帧保存到 Sybase 时找不到类型“TIMESTAMP”
Spring Boot + Flyway + AWS:原因:java.sql.SQLException:找不到合适的驱动程序
java.sql.SQLException: 找不到适合 jdbc:sqlserver 的驱动程序... (intellij, maven)