2014-07-26 75 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'文件夹下,这个文件夹默认在你的类路径中。 –