Oracle java存储过程

Oracle java存储过程,java,oracle,stored-procedures,gdata,Java,Oracle,Stored Procedures,Gdata,我试图在Oracle11g中创建一个Java存储过程,用于检索Google分析信息 这项工作已经进行了三天,但没有成功。下面是我一步一步做的: 使用以下方式将5个必需的JAR文件上载到数据库: loadjava-用户scott/tiger@WH01gdata-analytics-2.1.jar 然后我创建了java源文件(在pl/SQLDeveloperIDE中),并使用了上面链接中的示例代码。编译它(f8),它出现在Java类树中(与使用jar文件创建的类相同) 在我编写了调用java类的过程

我试图在Oracle11g中创建一个Java存储过程,用于检索Google分析信息

这项工作已经进行了三天,但没有成功。下面是我一步一步做的:

使用以下方式将5个必需的JAR文件上载到数据库:

loadjava-用户scott/tiger@WH01gdata-analytics-2.1.jar

然后我创建了java源文件(在pl/SQLDeveloperIDE中),并使用了上面链接中的示例代码。编译它(f8),它出现在Java类树中(与使用jar文件创建的类相同)

在我编写了调用java类的过程之后:

创建或替换程序KEVIN\u程序\u分析
作为JAVA语言
名称为“Kevin_Analytics.main(java.lang.String[])”

最后,我把这个过程称为:

exec KEVIN_PROCEDURE_ANALYTICS()

我得到了一个错误:

ORA-29532:Java调用被未捕获的Java异常终止:Java.lang.IllegalStateException:在不持有注册表锁的情况下无法调用dirty()。

使用google我找到了(一个类的java代码,其中有一个方法可以准确地打印这个错误消息),我想我必须使用一个同步的方法,请检查链接,我想你也会发现的

现在的问题是,我真的不知道如何以及在哪里我必须把这个同步的代码。如果你们中有人能给我看这个,我会非常高兴的

谢谢你阅读这篇文章,如果有人能帮助我,我将不胜感激


Kevin Vermaat从javadoc到您找到的方法:

 /**
   * Dirty this builder.  Whoever is modifying this builder must also hold
   * onto this builder's lock while modifying it, by using a
   * {@code sychronized(registryBuilder) ...} block, or this method will throw
   * an {@link IllegalStateException}.
   */

它说您必须在构建器锁上有一个锁,方法是将它放在
synchronized(registryBuilder){..}
块中。试着把它放在你的代码中。

好吧,从上面的链接下载JAR和示例,我将所有内容都加载到我的Oracle数据库中,得到了完全相同的错误。尽管错误肯定是由于同步问题造成的,但我没有什么需要添加的。代码是示例中的代码,我在何处没有发现直接使用“registryBuilder”对象的情况,也没有发现类中的任何对象

嗯,要把每件事都写得详细一点还需要很长时间。因此,我将编写在加载jar和运行代码时为克服各种错误而执行的步骤。也许执行相同的步骤也会为您解决问题

1-授予用户创建表和过程的权限,并增加其对用户表空间的配额。我将尝试使用您提供的数据作为用户和数据库。要授予授权,请以sysdba身份连接:

  sqlplus sys/password@WH01 as sysdba 
连接后,授予用户scott权限并增加其配额:

  grant create any table to scott;

  grant create any procedure to scott;

  alter user scott quota unlimited on users;
(请咨询您的DBA关于上述内容,因为它可能不适合像我出于懒惰那样给予无限的资助)

2-现在再次加载文件。我一次装上所有5罐。另外,将选项-f和-genmissing添加到命令中,因为如果没有它们,它将无法工作:

loadjava -genmissing -f -user scott/tiger@WH01 gdata-analytics-2.1.jar gdata-analytics-meta-2.1.jar gdata-core-1.0.jar google-collect-1.0-rc1.jar jsr305.jar

这就是我所做的,让它为我运行。

您需要完整的stacktrace进行法医分析。这听起来是学习如何检索的好时机。如果您下次登录时有时间,请阅读我对您答案的评论:)我不熟悉Oracle数据库中JVM的更精细的工作方式,无法帮助您找到这一点。你可能想打开一个新的问题,明确地问,并且只问如何做到这一点。谢谢。我也读过,但我不知道该把它放在代码里的什么地方,你能告诉我在哪里吗?非常感谢你的回答!关于stacktrace,您可以在线共享或预订任何教程?可能是关于引发异常的代码。您可能想阅读一下同步块在Java中的含义-Oracle Java教程是一个很好的起点。非常感谢,我会这样做,我的问题没有完全回答,但我会肯定地投票支持您的帖子,如果您发现更多信息,请随意评论^^,我也会发布第二个问题。谢谢AJ,这确实有效,非常感谢您为此付出的所有努力!