[英]java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver
[英]java.lang.ClassNotFoundException: com/microsoft/sqlserver/jdbc/SQLServerDriver
我对JAVA确实很陌生,但需要调用一个我已获得访问权限的SQL Server函数。
我已将Java调用内置到pl / sql函数中,并已从我的环境之一成功调用了它。 当我移到另一个环境时,我得到了错误
ORA-29532:Java调用因未捕获的Java异常而终止:java.lang.ClassNotFoundException:com / microsoft / sqlserver / jdbc / SQLServerDriver
我已经对此进行了彻底研究,并检查了JAVA的正确安装,这看起来不错,但我显然缺少某些东西。 我需要以某种方式跟踪此环境的差异,它在另一个环境中运行的事实证明了该类是正确的,因此它必须是配置问题。
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;
}
}
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 \\ SQL Server的Microsoft JDBC驱动程序4.0 \\ 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
首先,请下载正确的sql驱动程序,然后根据操作系统检查您使用的连接驱动程序是否正确。 然后,一旦必须测试连接是否正常,则将转到下一步。 所以请检查这个网址
适用于Linux的microsift sql服务器驱动程序https://msdn.microsoft.com/zh-cn/library/hh568451(v=sql.110).aspx
我的Linux版sql服务器驱动程序https://dev.mysql.com/downloads/connector/j/5.0.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.