2011-04-11 181 views
37

我在嘗試運行此程序時遇到此異常。這是微軟的例子之一。我已經通過項目屬性將sqljdbc4.jar添加到netbeans中的類路徑中,用於編譯和運行。我還測試了通過使用下面的import語句可以找到類 - 在編譯期間沒有錯誤,所以它一定是找到jar。java.sql.SQLException:找不到適合jdbc的驅動程序:microsoft sqlserver

它可能與dll或sqldbc4.jar引用的某些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(); 
    } 

}

+0

嗨..你有這個解決方案嗎?我也面臨同樣的問題..請幫助我 – Piraba 2011-11-11 09:27:10

+1

要解決上述問題請檢查我下面的簡單代碼... – 2012-06-27 04:46:23

+0

請下載sqljdbc4.jar並將其放在Jmeter的庫中 – 2013-02-19 15:49:28

回答

56

您的網址應jdbc:sqlserver://server:port;DatabaseName=dbname
和類名應該像com.microsoft.sqlserver.jdbc.SQLServerDriver
使用MicrosoftSQL Server JDBC Driver 2.0

+1

這就是我所擁有的。 – 2011-04-11 23:48:14

+1

請檢查您的網址。 – 2011-04-12 00:33:51

+3

該驅動程序的[舊版本](http://support.microsoft.com/kb/313100)是由於混淆。 [新版本](http://msdn.microsoft.com/en-us/library/ms378428)沒有提到要使用的正確前綴(jdbc:sqlserver://)。 – 2012-03-19 16:38:40

5

以下是從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(); 
     } 
    } 
} 
+0

它給我的例外... – Aniket 2013-07-17 11:52:03

+0

@Aniket - 請粘貼您獲得的完整例外 – 2013-07-18 14:48:06

+0

我正在NetBeans 7.0.1中的web應用程序中工作例外情況如下:SEVERE:此驅動程序不支持Java運行時環境(JRE)1.7版。使用sqljdbc4.jar類庫,它提供對JDBC 4.0的支持。 SEVERE:java.lang.UnsupportedOperationException:此驅動程序不支持Java運行時環境(JRE)版本1.7。使用sqljdbc4.jar類庫,它提供對JDBC 4.0的支持。 – Aniket 2013-07-18 15:01:19

0

你可以嘗試像下面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")); 
     } 
    } 
0

我有同樣的錯誤,但有一個正確的連接字符串。我的問題是駕駛員沒有被使用,因此在編譯後的戰爭中進行了優化。

一定要導入驅動程序:

import com.microsoft.sqlserver.jdbc.SQLServerDriver; 

然後迫使它被包含在最終的戰爭中,你可以做這樣的事情:

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

這條線是在原來的問題。這也將工作:

SQLServerDriver driver = new SQLServerDriver(); 
相關問題