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.jar
、derbyclient.jar
、derbytools.jar
和 derbynet.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 的精确程度,您可能会在 startNetworkServer
或 startNetworkServer.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
我一直在 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.jar
、derbyclient.jar
、derbytools.jar
和 derbynet.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 的精确程度,您可能会在 startNetworkServer
或 startNetworkServer.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