java - Derby , java : Trouble with "CREATE_TYPE" statement

标签 java eclipse types classpath derby

我一直在 Eclipse 中摆弄 Apache Derby。我已经启动了网络服务器,并且一直在使用 servlet。在我的 Eclipse 项目中,我有一个名为“User”的类,位于包“base.pack”内。我打开了一个 SQL 脚本,并且一直在尝试将实现 Serialized 的 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));

我收到以下错误:

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

现在,该类实际上是公共(public)的,并且正如我之前指出的,它确实实现了 Serialized。我不认为我错误地陈述了包名称,但我可能是错的。我想知道,这是我的类路径的问题吗?如果是这样,您建议我如何解决这个问题?我承认我对类路径了解不多。

谢谢。

(作为引用,我已将项目构建路径配置为包括 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 设置。

如果是像 Eclipse 或 Netbeans 这样启动 Derby Network Server 的工具,您需要深入研究该工具的详细信息,以了解有关如何配置其 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

关于java - Derby , java : Trouble with "CREATE_TYPE" statement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30734839/

相关文章:

java - 替换事务后如何保持 fragment 状态?

eclipse - pydev关闭括号自动完成

eclipse - 如何向我的 GEF 编辑器添加双击监听器?

types - 有没有办法创建只接受一系列值的数据类型?

java - 如何在创建 java 之前估计 zip 文件的大小

java - java中的依赖管理

typescript - 有没有办法在 typescript 定义中引用函数参数?

types - 为什么不能使用行多态性将对象存储在异构容器中?

JavaFX:舞台的 minHeight 考虑标题栏的高度

android - 为什么我的 Eclipse IDE 的表单小部件部分没有 EditText