1

我不确定我的 derby 数据库发生了什么,但我似乎有可以从 ij 界面看到的表...

ij> show tables in derbytest;
TABLE_SCHEM         |TABLE_NAME                    |REMARKS
------------------------------------------------------------------------
DERBYTEST           |DATATYPETEST                  |
DERBYTEST           |LOCATION                      |
DERBYTEST           |SUIVI                         |

现在我得到了表格描述......

ij> describe derbytest.datatypetest;
COLUMN_NAME         |TYPE_NAME|DEC&|NUM&|COLUM&|COLUMN_DEF|CHAR_OCTE&|IS_NULL&
------------------------------------------------------------------------------
A_DATE              |DATE     |0   |10  |10    |NULL      |NULL      |NO
AN_INT              |INTEGER  |0   |10  |10    |NULL      |NULL      |YES
A_DECIMAL           |DECIMAL  |0   |10  |5     |NULL      |NULL      |YES
A_STRING            |VARCHAR  |NULL|NULL|20    |NULL      |40        |YES
A_SWITCH            |BOOLEAN  |NULL|NULL|1     |NULL      |NULL      |YES

所以我猜这张桌子是存在的,但是......

ij> select * from derbytest.datatypetest;
ERREUR XSAI2 : Le conglomÚrat (1á232) demandÚ n'existe pas.

所以快速检查一下问题是否是由“空”表引起的..

ij> select * from derbytest.suivi;
OBS        |DATE                         |TIME
-----------------------------------------------------------------------

对我来说,这不建议!

我不确定我是否完全理解错误消息的含义,我在文档中找到了

表 36. XSAI 类:存储 - access.protocol.interface SQLSTATE 消息文本 XSAI2 请求的 conglomerate () 不存在。

这不是很有帮助!我已经查看了引擎、语言、测试和工具的各种 API 文档,但我不知道从哪里开始,任何指针都会有所帮助。

这可能与我如何设置数据库有关,所以一些快速背景。

我从一个 java 测试类连接到这个测试数据库。它从另一个数据源(平面文件的 XL)收集信息,然后将其放入该数据库(或者这就是目标)。我只展示了一个小的“测试”,以确保我的连接正常工作。

我在这个文件中有另一个架构,它有更多的表,它们都有同样的问题。

我是否没有正确关闭连接并丢失数据?我是否不知何故无意中删除了一个包含丢失的“企业集团”的数据文件

非常感谢任何帮助。

大卫。

ps 我还有其他测试数据库,我没有检查它们是否有同样的问题。我在 XP 上运行 java 6。

编辑1:刚刚检查了我正在使用的另一个testDB,它不包含表!很明显,我自己清理干净了。现在那只猫去哪儿了??

4

1 回答 1

0

可以肯定的是,这是一种奇怪的行为。我不确定出了什么问题。

您是否在事务中创建了表但尚未提交该事务?

您是否使用内存数据库创建表,在这种情况下,当您关闭数据库时它会消失?

您是否在磁盘上的一个位置创建了数据库,然后使用“create=true”连接到另一个位置,在这种情况下,Derby 在新位置创建了一个新的空白数据库?

您是否使用一种模式创建数据库,然后使用不同的模式连接?

该错误消息确实表明该表存在一些内部损坏。括号中的数字 (1a232) 是一个集团编号,它也用于在您的文件系统中标识集团的文件名。因此,您可以查看文件系统并将那里的文件与数据库中的表相匹配(通过从 sys.sysconglomerates 中选择)。

您将获得表本身的聚合,以及每个二级索引的附加聚合,包括由 CREATE INDEX 创建的和由隐式约束(如 UNIQUE 或 REFERENCES)创建的那些。

如果您怀疑表损坏,最好从备份中恢复。您是否遇到过任何可能表明表损坏的系统崩溃、磁盘已满事件等?

于 2012-08-14T14:13:10.623 回答