JDBC Apache derby SYSCOLUMNS表不显示信息

时间:2013-12-17 10:07:05

标签: java database apache jdbc derby

我正在调查Apache Derby中的系统表(在SYS Schema中)。我有一个使用Apache Derby RDBMS的数据库,我添加了三个表,称为Accounts,Customers和Employees。数据库运行在Java应用程序后面,该应用程序对这三个表运行查询以执行任何一个CRUD函数(这些查询工作正常,因此没有问题)

我想要做的是使用SQL获取有关我通过数据库中的系统表创建的表的元数据(表名,列名,表中的数据等)(不是Java的类,我知道而不是简单地查询实际的表本身。我查看了对Derby system tables表格的引用 页面,我认为我应该关注的表是SYSCOLUMNS和SYSTABLES。奇怪的是,SYSTABLES显示有关我的表的信息,但SYSCOLUMNS没有。

SYS模式中还有其他表包含有关我的表的数据,例如SYSCONTSTRAINTS,SYSFOREIGNKEYS,SYSKEYS和(如上所述)SYSTABLES。所以对我而言,SYSCOLUMNS也没有关于我的表格的信息,这有点奇怪。

当我实际对SYSCOLUMNS运行查询时出现此错误:

Error code 20000, SQL state XN020: Error marshalling or unmarshalling a user defined type: org.apache.derby.catalog.types.TypeDescriptorImpl

我认为这是指COLUMNDATATYPE列(基于读取上面链接中SYSCOLUMNS表的引用)但我查看了其他页面并且不太了解它。

如果它有帮助,我的表的列和数据类型:

客户

CUSTOMER_ID(整数主键自动增量(从1开始,以1为增量))

FULL_NAME(Varchar(50))

帐户

ACCOUNT_ID(整数主键自动增量(从1开始,以1为增量))

CUSTOMER _ID(整数外键(在CUSTOMER中引用CUSTOMER_ID)

ACCOUNT_TYPE(Varchar(50))

平衡(双倍)

CREDIT_LIMIT(双倍)

EMPLOYEES

EMPLOYEE_ID(整数主键自动增量(从1开始,以1为增量))

FULL_NAME(Varchar(50))

USERNAME(Varchar(50))

PASSWORD(Varchar(50))

道歉但由于声誉规则我无法发布任何屏幕截图(我已登录我的Google帐户)。它的要点是:SYSTABLES有关于我的表的数据而SYSCOLUMNS没有,我认为上面的错误是原因,但我不明白错误是什么以及如何修复它(如果有的话)

1 个答案:

答案 0 :(得分:1)

您使用的是嵌入式驱动程序还是客户端 - 服务器驱动程序?

你在运行什么版本的Derby?

我将推测,并猜测您正在使用客户端 - 服务器驱动程序,并且您遇到了DERBY-5407DERBY-4688和{{3}的某种组合}。

如果您可以将您的复制品打包成一个简单的测试用例,那么如果您能够在Derby JIRA上记录一份包含所有细节的新工作,那就太棒了。

与此同时,您可以调查这些工作建议的一些解决方法:

  1. 使用嵌入式Derby驱动程序,而不是客户端 - 服务器驱动程序
  2. 将derby.jar和derbytools.jar放入CLASSPATH,以及derbyclient.jar