【问题标题】:ClassNotFoundException in calling java from oracle procedure从 oracle 过程调用 java 时出现 ClassNotFoundException
【发布时间】:2012-08-02 13:53:14
【问题描述】:

这是我的预言机procedure

FUNCTION JavaHefExtract_runSingle (
    p_company_cd        varchar2,
    p_srcConnString     varchar2,
    p_destConnString    varchar2,
    p_mode              number,
    p_period            number
    ) return varchar2
IS
LANGUAGE JAVA
NAME 'HefExtract.DoIt(java.lang.String, java.lang.String, java.lang.String, int, int ) return java.lang.String';

这是我的 java function:

import com.microsoft.sqlserver.jdbc.*;
import java.math.BigInteger;
import java.sql.*;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Enumeration;
import oracle.jdbc.*;
import java.io.*;

public class HefExtract
{

 public static String DoIt(String orgName, String oracleConnstring, String sqlConnstring, int typ, int iPeriod )
    {
        String errMsg = null;
        Connection sqlConn;
        Connection oracleConn;
        try
        {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            Class.forName("oracle.jdbc.OracleDriver");
            if (oracleConnstring != null)
                oracleConn = DriverManager.getConnection(oracleConnstring);
            else
                oracleConn = new OracleDriver().defaultConnection();
            sqlConn = DriverManager.getConnection(sqlConnstring);
        } catch (Throwable e1) {
            CharArrayWriter byteSink = new CharArrayWriter();
            e1.printStackTrace(new PrintWriter(byteSink));
            return byteSink.toString();
        }
        return errMsg;
}
}

当我在 PL/SQL 块中调用 oracle procedure 时,会返回此错误:

java.lang.ClassNotFoundException: com/microsoft/sqlserver/jdbc/SQLServerDriver 在 java.lang.Class.forName0(本机方法) 在 java.lang.Class.forName(Class.java) 在 HefExtract.DoIt(HEFEXTRACT:415)

这个错误背后的原因可能是什么?

【问题讨论】:

  • com.microsoft.sqlserver.jdbc.SQLServerDriver 是 Microsft SQL 驱动程序而不是 oracle 的驱动程序。您收到此错误是因为您的类路径上没有 microsft sql 驱动程序
  • 你在Oracle服务器中注册了Java类吗?如果你没有连接到 SQL Server,你为什么要加载它的驱动程序?

标签: java oracle exception classnotfoundexception procedure


【解决方案1】:

据我所知,在您的情况下不需要使用 Microsoft SQL Server 驱动程序。只需删除与 Microsoft 驱动程序有关的所有内容,即删除这些行:

import com.microsoft.sqlserver.jdbc.*;

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

【讨论】:

    【解决方案2】:

    阅读这篇关于如何设置类路径的 Wiki 文章,其中有很多示例。 http://en.wikipedia.org/wiki/Classpath_(Java)

    如果您使用的是 Eclipse 选择项目 -> 属性 -> 项目构建路径 -> Java 库找到 jar 文件并选择它

    如果您使用的是 netbeans 选择项目 -> 属性 -> 库 -> 编译找到 jar 并选择它

    post 也可能有助于解决您的问题

    【讨论】:

    • 这是一个服务器端的 Java 函数。这些不受 NetBeans 或 Eclipse 类路径的影响
    猜你喜欢
    • 1970-01-01
    • 2021-03-02
    • 1970-01-01
    • 1970-01-01
    • 2014-03-16
    • 2012-01-27
    • 2013-09-28
    • 1970-01-01
    • 2011-09-14
    相关资源
    最近更新 更多