java.lang.ClassNotFoundException:com / microsoft / sqlserver / jdbc / SQLServerDriver

时间:2016-01-04 10:00:20

标签: java sql-server jdbc

我是JAVA的新手,但需要调用我已获得访问权限的SQL Server函数。

我已经在pl / sql函数中构建了一个JAVA调用,并成功地从我的一个环境中调用它。当我移动到另一个环境时,我收到错误

ORA-29532:Java调用因未捕获的Java异常而终止:java.lang.ClassNotFoundException:com / microsoft / sqlserver / jdbc / SQLServerDriver

我已经研究了这个死亡并检查了JAVA的正确安装,看起来很好,但我显然遗漏了一些东西。我需要以某种方式跟踪这个环境中的不同之处,它在其他envionmnet中运行的事实证明该类是正确的,因此它必须是配置问题。

JAVA Class

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.net.Socket;
import java.io.IOException;

public class xxiceHJ
{
    protected static String JDBC_DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";  
    protected static String DB_URL = "jdbc:sqlserver://999.999.99.99:1433";
    protected static String USER = "xxxx";
    protected static String PWD = "xxxxx123$";

    public static String getOrderStatus (String OrderNumber) throws SQLException, Exception
    {
        Connection conn = null;
        CallableStatement cs = null;
        ResultSet rs = null;
        String Message = null;
        String WarehouseId = "01";

        try
        { 
            // Register JDBC driver
            Class.forName(JDBC_DRIVER);

            //Open a connection
            conn = DriverManager.getConnection(DB_URL, USER, PWD);

            cs = conn.prepareCall("{call usp_get_order_status(?,?,?)}"); 
            cs.setString(1, WarehouseId);
            cs.setString(2, OrderNumber);
            cs.setString(3, Message);

            rs = cs.executeQuery();

            //if prodeure return a value
            if (rs.next())
            {
                Message = rs.getString(1);
            }

            //Clean-up environment
            rs.close();
            cs.close();
            conn.close();

//        }
//        catch (SQLException se)
//        {
//            //Handle errors for JDBC
//            cfFileNumber = "SQLException" + se.toString();
//            se.printStackTrace();
//        }
//        catch (Exception e)
//        {
//            //Handle errors for Class.forName
//            cfFileNumber = "Exception" + e.toString();
//            e.printStackTrace();
        }
        finally
        {
            //finally block used to close resources
            try
            {
                if (rs!=null)
                {
                    rs.close();
                }
            }
            catch (SQLException se2)
            {
                //nothing we can do
            }
            try
            {
                if (cs!=null)
                {
                    cs.close();
                }
            }
            catch (SQLException se2)
            {
                //nothing we can do
            }
            try
            {
                if (conn!=null)
                {
                    conn.close();
                }
            }
            catch (SQLException se)
            {
                se.printStackTrace();
            }

        }
        return Message;

    }



}

2 个答案:

答案 0 :(得分:0)

CLASSPATH变量是Java虚拟机(JVM)用于在计算机上查找JDBC驱动程序的搜索字符串。如果您的CLASSPATH变量中未列出驱动程序,则在尝试加载驱动程序时会收到以下错误消息: java.lang.ClassNotFoundException:com / microsoft / jdbc / sqlserver / SQLServerDriver

JDBC驱动程序不是Java SDK的一部分。如果要使用它,则必须将类路径设置为包含sqljdbc.jar文件或sqljdbc4.jar文件。如果类路径缺少sqljdbc.jar或sqljdbc4.jar的条目,则应用程序将抛出公共"未找到的类"异常。

sqljdbc.jar文件和sqljdbc4.jar文件安装在以下位置: \ sqljdbc _ \\ sqljdbc.jar \ sqljdbc _ \\ sqljdbc4.jar

以下是用于Windows应用程序的CLASSPATH语句的示例: CLASSPATH =。; C:\ Program Files \ Microsoft JDBC驱动程序4.0 for SQL Server \ sqljdbc_4.0 \ enu \ sqljdbc.jar
以下是用于Unix / Linux应用程序的CLASSPATH语句的示例: CLASSPATH =。:/ home / usr1 / mssqlserverjdbc / Driver / sqljdbc_4.0 / enu / sqljdbc.jar 您必须确保CLASSPATH语句仅包含一个用于SQL Server的Microsoft JDBC驱动程序,例如sqljdbc.jar或sqljdbc4.jar。

有关详细信息,请参阅:
http://support.microsoft.com/kb/313100
http://msdn.microsoft.com/en-us/library/ms378526.aspx

答案 1 :(得分:0)

首先请下载正确的sql驱动程序,然后根据操作系统检查您是否使用了正确的连接驱动程序。然后,一旦你必须测试你的连接,如果它的工作正常,那么你将去下一个。 所以请检查这个网址
用于linux的microsift sql server驱动程序 https://msdn.microsoft.com/en-us/library/hh568451(v=sql.110).aspx

我的Linux sql server驱动程序 https://dev.mysql.com/downloads/connector/j/5.0.html