2016-01-04 67 views
0

我真的是JAVA的新手,但需要調用一個SQL Server的功能,我已被授予訪問權限。java.lang.ClassNotFoundException:com/microsoft/sqlserver/jdbc/SQLServerDriver

我已經建立了一個JAVA調用到一個PL/SQL函數,併成功地從我的一個環境調用它。當我移動到另一個環境我得到的錯誤

ORA-29532:Java調用被未捕獲的Java異常終止:拋出java.lang.ClassNotFoundException:COM /微軟/ SQLSERVER/JDBC/SQLServerDriver

我研究這死亡和檢查正確的安裝JAVA這似乎很好,但我顯然缺少的東西。我需要以某種方式跟蹤這個環境的不同之處,它在另一個envionmnet中運行的事實證明這個類是正確的,所以它必須是一個配置問題。

Java類

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; 

    } 



} 
+0

您是否附有SQLSERVER庫? – Vyacheslav

+0

sqlserver函數是在外部開發的,函數發佈給我。我需要sqlserver庫嗎? – Nickik

+0

是的,您需要在應用程序的類路徑上安裝SQL Server JDBC驅動程序。使用最新版本的驅動程序(假設您使用Java 6或更高版本),不需要使用'Class.forName'加載驅動程序。 –

回答

0

CLASSPATH變量是搜索字符串,Java虛擬機(JVM)用於在您的計算機上的JDBC驅動程序。如果驅動程序未在CLASSPATH變量中列出,當您嘗試加載驅動程序收到以下錯誤信息: 拋出java.lang.ClassNotFoundException:COM /微軟/ JDBC/SQLSERVER/SQLServerDriver

的JDBC驅動程序不屬於Java SDK的一部分。如果要使用它,則必須將類路徑設置爲包含sqljdbc.jar文件或sqljdbc4.jar文件。如果類路徑缺少sqljdbc.jar或sqljdbc4.jar的條目,則您的應用程序將拋出常見的「未找到類」異常。

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

以下是CLASSPATH語句示例用於Windows應用程序: CLASSPATH = .; C:\ Program Files \ Microsoft JDBC驅動程序4.0 for SQL Server \ sqljdbc_4.0 \ enu \ sqljdbc.jar
以下是CLASSPATH語句的示例用於Unix/Linux應用程序: CLASSPATH =。:/ home/usr1/mssqlserverjdbc/Driver/sqlj dbc_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

+0

謝謝。欣賞信息 – Nickik