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 要求されたコングロマリット () は存在しません。

これは驚くほど役に立ちません!エンジン、言語、テスト、およびツールに関するさまざまな API ドキュメントを調べましたが、どこから調べればよいかわかりません。ポインタは役に立ちます。

データベースの設定方法に関連している可能性があるため、簡単な背景を説明します。

Java テスト クラスからこのテスト DB に接続します。別のデータソース (フラット ファイルの XL) から情報を収集し、それをこのデータベースにドロップします (またはそれが目的です)。接続が機能していることを確認するための小さな「テスト」のみを示しています。

このファイルには、より多くのテーブルを持つ別のスキーマがあり、それらすべてに同じ問題があります。

接続が正しく閉じられず、データが失われたのでしょうか? 欠落している「コングロマリット」を含むデータファイルを誤って削除してしまったのでしょうか。

どんな助けでも大歓迎です。

デビッド。

ps 同じ問題があるかどうかを確認していない他のテスト DB があります。XPでJava 6を実行しています。

edit1:私が使用している他のtestDBをチェックしたところ、テーブルが含まれていません! 私は明らかに自分の後片付けをしました。今、その猫はどこに行きましたか??

4

1 に答える 1

0

確かに、それは奇妙な振る舞いです。何が悪いのかわからない。

トランザクション内でテーブルを作成しましたが、まだそのトランザクションをコミットしていませんか?

インメモリ データベースを使用してテーブルを作成しましたか? その場合、データベースを閉じるとテーブルは消えますか?

ディスク上のある場所にデータベースを作成し、後で「create=true」を使用して別の場所に接続しましたか? この場合、Derby は新しい場所に新しい空のデータベースを作成しますか?

あるスキーマを使用してデータベースを作成し、別のスキーマに接続しましたか?

エラー メッセージは、テーブルの内部損傷を示しています。括弧内の数字 (1a232) はコングロマリット番号であり、ファイルシステムでコングロマリットのファイル名を識別するためにも使用されます。したがって、ファイルシステムを調べて、そこにあるファイルをデータベース内のテーブルと一致させることができます (sys.sysconglomerates から選択することにより)。

テーブル自体のコングロマリットに加えて、CREATE INDEX によって作成されたものと UNIQUE や REFERENCES などの暗黙の制約によって作成されたものの両方のセカンダリ インデックスごとに追加のコングロマリットを取得します。

テーブルの破損が疑われる場合は、バックアップから復元することをお勧めします。テーブルの損傷を示している可能性のあるシステム クラッシュ、ディスク フル イベントなどを経験しましたか?

于 2012-08-14T14:13:10.623 に答える