2014-07-26 70 views
0

我試圖使用Eclipse Web項目中的sqljdbc4連接到MS SQL Server 2014的jdbc連接,但沒有任何運氣。使用sqljdbc4.jar從Eclipse連接到MSSQL服務器的JDBC連接

這裏是我到目前爲止已經試過:

  1. Web項目之外創建一個測試類,添加罐子構建路徑,並嘗試建立連接 - 在項目的WEB成功
  2. 將罐子-INF/lib,添加jar以構建路徑,但不添加項目的Web App Library並嘗試建立連接 - 失敗
  3. 將jar放在中央Tomcat lib下並嘗試建立連接 - 失敗

大多數論壇的用戶通過在上面的列表中完成數字(2)而取得了成功。我剛剛開始使用JDBC,甚至到了這個階段還需要一段時間。 但不幸的是,無法進一步。我現在已經堅持了將近7個小時,而令人沮喪的是它每次都從一個普通的java項目中運行。 爲什麼會這樣,當IDE中的任何一種項目需要jar進入其classpath?

不知道這會有多大的幫助,但這裏是我想出的代碼,試圖建立連接。 它總是會導致SQLException:在'try'後第一行沒有找到適用於jdbc:sqlserver的合適驅動程序。

public class SQLConnector { 
    private static final String DB_SERVER = "jdbc:sqlserver://SAI;" 
       + "DatabaseName=LibraryManagementSystem"; 
    private static final String DB_USER="sa"; 
    private static final String DB_PASS="abc732XYZ"; 

    public static Connection getDatabaseConnection() { 
     Connection connection = null; 
     try { 
      connection = DriverManager.getConnection(DB_SERVER, DB_USER, DB_PASS); 
      if(connection != null) { 
       System.out.println("Connection successful"); 
      } 
     } 
     catch(SQLException e) { 
      e.printStackTrace(); 
     } 
     return connection; 
    } 
} 

請仔細閱讀並提供幫助。

Here is my project tree for the Web application

回答

1

我結束了使用Tomcat連接池,它的工作。這是通過在Web內容下的META-INF下創建一個具有以下內容的Context.xml文件完成的。

<Context> 
     <!-- Specify a JDBC datasource --> 
     <Resource name="jdbc/LibraryManagementSystem" auth="Container" 
     type="javax.sql.DataSource" username="sa" password="abc732XYZ" 
     driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" 
     url="jdbc:sqlserver://SAI:1433;DatabaseName=LibraryManagementSystem" 
     maxActive="10" maxIdle="4" /> 
    </Context> 

並適當地更改連接器類以反映通過使用DataSource和初始上下文的連接池。此外,建議使用純jdbc連接池。

public class SQLConnector 
{ 
    private static final String DB_NAME = "jdbc/LibraryManagementSystem"; 
    private static Connection connection; 

    public static Connection getDatabaseConnection() { 

     try { 
      Context initContext = new InitialContext(); 
      Context envContext = (Context)initContext.lookup("java:/comp/env"); 
      DataSource dataSource = (DataSource)envContext.lookup(DB_NAME); 
      connection = dataSource.getConnection(); 
     } 
     catch (NamingException | SQLException e) { 
      e.printStackTrace(); 
     } 
     return connection; 
    } 
} 
1

是下配售項目的WEB-INF/lib下的jar應該可以解決這個問題,但這些罐子,你將是同樣重要的。

由於您沒有使用Class.forName()加載類,我假設您正在使用JDBC 4.0(JAVA6/7)。所以你需要在該目錄下放置罐子sqljdbc4.jar。您可以從here下載。

+0

謝謝Aniket。我從[這裏]下載了它(http://www.microsoft.com/en-us/download/details.aspx?id=11774)。 2.0提供的鏈接和我正在使用的鏈接有什麼區別?並且Connection類也可以在非Web Applcation環境中正常工作。這怎麼可能? – Sai

+0

看起來像你的是最新的驅動程序,它提供了直到'SQL Server 2014,SQL Server 2012'的訪問,不像我的下載鏈接只支持到2008版本。 –

+0

對於非web應用程序上下文,JVM將從類路徑中的任何目錄中提取驅動程序。當你運行web app的時候是tomcat容器,你所有的庫都在'WEB-INF/lib'文件夾下,這個文件夾默認在你的類路徑中。 –