Derby,Java:"CREATE_TYPE" 语句有问题

Derby, Java: Trouble with "CREATE_TYPE" statement

我一直在 Eclipse 中摆弄 Apache Derby。我已经启动了网络服务器,并且一直在使用 servlet。在我的 Eclipse 项目中,我在包 "base.pack" 中有一个名为 "User" 的 class。我打开了一个 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

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

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

我收到以下错误:

The class 'base.pack.User' for column 'NAME' does not exist or is inaccessible. This can happen if the class is not public.

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

谢谢。

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

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

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

都可以,只是不是新手级别的项目

要开始自定义 Derby Network Server,第一个主题涉及如何启动它。以下是一般流程的概述:http://db.apache.org/derby/docs/10.11/adminguide/tadmincbdjhhfd.html

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

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

并且如果您编写了自定义 Java 应用程序来启动 Derby Network Server(例如,如此处所述: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 Network Server 中,因为看起来像是恶意软件攻击,Derby Network Server 将尝试阻止这种攻击。因此,请研究安全手册的这一部分:http://db.apache.org/derby/docs/10.11/security/tsecnetservrun.html