【发布时间】:2014-01-05 00:59:34
【问题描述】:
我正在调查 Apache Derby 中的系统表(在 SYS 模式中)。我有一个使用 Apache Derby RDBMS 的数据库,并向其中添加了三个表,分别称为 Accounts、Customers 和Employees。数据库在 Java 应用程序后面运行,该应用程序对这三个表运行查询以执行任何一个 CRUD 功能(这些查询工作正常,因此没有问题)
我想要做的是使用 SQL(不是 Java 的类,我知道的)通过数据库中的系统表(表名、列名、表中的数据等)获取有关我创建的表的元数据about) 而不是简单地查询实际的表本身。我查看了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(双倍)
员工
EMPLOYEE_ID(整数主键自动递增(从 1 开始,递增 1))
FULL_NAME (Varchar (50))
用户名(Varchar (50))
密码(Varchar (50))
抱歉,由于信誉规则,我无法发布任何屏幕截图(我已登录我的 Google 帐户)。它的要点是:SYSTABLES 有关于我的表的数据,而 SYSCOLUMNS 没有,我认为上述错误是原因,但我不明白错误是什么以及如何修复它(如果有的话)
【问题讨论】: