我正在调查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没有,我认为上面的错误是原因,但我不明白错误是什么以及如何修复它(如果有的话)
答案 0 :(得分:1)
您使用的是嵌入式驱动程序还是客户端 - 服务器驱动程序?
你在运行什么版本的Derby?
我将推测,并猜测您正在使用客户端 - 服务器驱动程序,并且您遇到了DERBY-5407,DERBY-4688和{{3}的某种组合}。
如果您可以将您的复制品打包成一个简单的测试用例,那么如果您能够在Derby JIRA上记录一份包含所有细节的新工作,那就太棒了。
与此同时,您可以调查这些工作建议的一些解决方法: