【问题标题】:Derby, Java: Trouble with "CREATE_TYPE" statementDerby,Java:“CREATE_TYPE”语句出现问题
【发布时间】:2015-06-09 14:22:28
【问题描述】:

我一直在 Eclipse 中使用 Apache Derby。我已经启动了一个网络服务器,并且一直在使用 servlet。在我的 Eclipse 项目中,我在包“base.pack”中有一个名为“User”的类。我打开了一个 SQL 脚本,我一直在尝试将实现 Serializable 的 User 转换为自定义类型。当我运行以下几行时,一切正常:

CREATE TYPE CARTEBLANCHE.bee
EXTERNAL NAME 'base.pack.User'
LANGUAGE JAVA

这遵循他们在此处确定的一般格式:http://db.apache.org/derby/docs/10.7/ref/rrefsqljcreatetype.html#rrefsqljcreatetype

现在,当我尝试使用这种新类型创建表时,出现错误。我运行以下行:

CREATE TABLE CARTEBLANCHE.TestTabel (ID INTEGER NOT NULL, NAME CARTEBLANCHE.bee, PRIMARY KEY(ID));

我收到以下错误:

列“NAME”的类“base.pack.User”不存在或无法访问。如果该类不是公开的,则可能会发生这种情况。

现在,该类实际上是公共的,正如我之前提到的,它确实实现了 Serializable。我认为我没有错误地说明包名称,但我可能是错的。我想知道,这是我的类路径的问题吗?如果是这样,你会建议我如何解决这个问题?我承认我对类路径了解不多。

谢谢。

(作为参考,我已将我的项目构建路径配置为包含derby.jarderbyclient.jarderbytools.jarderbynet.jar,并且我已将这些文件放入我的项目的lib 文件夹中)。

【问题讨论】:

  • 您是否在“我收到以下错误”的问题中粘贴了错误的文本?看起来您两次粘贴了 CREATE TABLE 语句。
  • 糟糕!你是对的,我的错。我编辑了问题以包含正确的错误消息 - 感谢您指出这一点!

标签: java eclipse types classpath derby


【解决方案1】:

尽可能礼貌地建议,如果您对 Java 的 CLASSPATH 概念感到不舒服,那么在 Derby 中编写您自己的自定义数据类型可能是一个具有挑战性的项目?

在您在此处描述的特定情况下,将出现的一个问题是您的自定义 Java 代码必须不仅可用于您的客户端应用程序,还必须可用于 Derby Network Server,这意味着您需要修改服务器的 CLASSPATH 以及您的应用程序的 CLASSPATH。

一切皆有可能,只是不是初级项目。

要开始定制您的 Derby Network Server,第一个主题涉及您如何启动它。大致流程如下:http://db.apache.org/derby/docs/10.11/adminguide/tadmincbdjhhfd.html

根据您启动 Derby 网络服务器的精确程度,您可能会在 startNetworkServerstartNetworkServer.bat 脚本中编辑 CLASSPATH 设置,或者您将在您自己的脚本中编辑 CLASSPATH 设置已写入启动服务器。

如果启动 Derby 网络服务器的是 Eclipse 或 Netbeans 之类的工具,您需要深入了解该工具的详细信息,以了解有关如何配置其 CLASSPATH 的更多信息。

如果您编写了自定义 Java 应用程序来启动 Derby 网络服务器(例如,如下所述:http://db.apache.org/derby/docs/10.11/adminguide/tadminconfig814963.html),那么您将配置自定义应用程序的 CLASSPATH。

无论如何,作为一个基本步骤,您需要在 Derby Network Server 的类路径中部署自定义 Java 扩展类,这意味着您需要将它们构建到 .jar 文件中并将该 .jar在 Derby Network Server 可以访问的某个地方创建文件,并且您希望使构建 jar 并复制到正确位置的过程简单明了,因此您应该将其集成到任何构建工具中您正在使用(Apache Ant?)。

而且,您需要考虑 Java 安全策略,因为默认安全策略会阻止您将自定义 Java 类简单地加载到 Derby 网络服务器中,因为这看起来像是恶意软件攻击,而 Derby 网络服务器将尽量防止这种情况。因此,请研究安全手册的这一部分:http://db.apache.org/derby/docs/10.11/security/tsecnetservrun.html

【讨论】:

  • 感谢您的坦率。我知道这可能非常具有挑战性,但我致力于解决这个问题,无论这意味着使用 CLASSPATH 还是切换到 Oracle 之类的东西。然而,就目前而言,我想继续与德比一起跋涉。你能给我一些关于修改服务器的CLASSPATH的建议吗?
  • 我按照您的指示进行了操作,运行了 SQL 脚本,当它运行时差点把我自己甩掉。我已经习惯了在 SQL 结果窗口中看到“X Failed”弹出。非常感谢您在这里的帮助!我希望我有足够的声誉给你一个支持。感谢您的回答如此详细。
猜你喜欢
  • 1970-01-01
  • 2020-07-25
  • 1970-01-01
  • 1970-01-01
  • 2022-06-16
  • 2014-09-10
  • 1970-01-01
  • 1970-01-01
  • 2013-11-17
相关资源
最近更新 更多