无法通过Servlet连接到SQL Server,但可以在本地连接到它

时间:2011-04-02 06:54:43

标签: java sql-server servlets jdbc

我正在尝试通过JDBC连接到SQL Server - 因为我已经创建了一个名为Sahoodblib的类,它可以完成连接数据库和检索数据的工作。我创建了另一个名为Sahooclient的客户端 - 它提供了一个显示数据的前端。到目前为止,该系统运行良好。

现在,我正在尝试创建一个实例化Sahoodblib的servlet,然后我继续获取ClassNotFoundException,我追溯它并在Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver")得到异常

现在,这让我感到困惑,因为当我在本地调用方法时,这种方法非常好,但是当我通过浏览器执行此操作时,我会遇到问题。我已经为SQL Server启用了TCP / IP和所有其他连接。

这是我收到错误的地方:

   /* Initialize the servlet. */
@Override
public void init(ServletConfig config) throws ServletException {
    super.init(config);
    sdb = new Sahoodblib("ism6236","ism6236bo");
}

编辑:

这是我连接到DB的方式:

    public Sahoodblib(String uname, String pwd) {
    try {
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        String url = "jdbc:sqlserver://localhost;" + 
            "databaseName=Travel;user=ism6236;password=ism6236bo;";
        cn = DriverManager.getConnection(url);
    } catch (ClassNotFoundException ex) {
        Logger.getLogger(Sahoodblib.class.getName()).log(Level.SEVERE, null, ex);
    } catch (SQLException ex) {
        Logger.getLogger(Sahoodblib.class.getName()).log(Level.SEVERE, null, ex);
    }
    set_max_tid();
}

1 个答案:

答案 0 :(得分:2)

当您独立运行时,类com.microsoft.sqlserver.jdbc.SQLServerDriver位于类路径中。当你作为servlet运行时,它不是。

您需要弄清楚这些类路径是如何不同的。运行客户端时,是否在jar文件中提供包含SQL Server类的类路径?

  • 如果这样做,您需要查看Web服务器并找出如何使用相同的jar文件提供它;通常你把它放在你的web-app的WEB-INF / lib目录中。
  • 如果不这样做,它将包含在JVM的一个默认位置。客户端和Web服务器是否使用相同的JVM?

我假设您在JAR文件中拥有所有SQL Server内容。如果您已将其解压缩到某处,则类路径需要解压缩的目录而不是jar文件本身。

您可以在http://download.oracle.com/javase/6/docs/technotes/tools/findingclasses.html

中找到有关类加载器查找类的位置的更多信息