2009-05-28 5 views
1

デュアル主キーを持つリンク(または参照)テーブルがあります。選択したテーブルで現在の接続から自動生成された最後の主キーを返す必要があります。これはjavaにあります。 違いがあれば、データベースはMS Accessにあります。 急いで申し訳ありませんが、私たちのチームは厳しいスケジュールに取り組んでいます。Javaで最後に追加した項目の最後の主キーを返すにはどうすればよいですか?

いずれのリンクや提案も歓迎します。

編集:

データベースはSQLを使用して作成されます。 1つのフォームのデータを入力しますが、自動生成された番号はわかりません。これが何であったかを知る必要があるので、refテーブルに入力することができます。私たちは複合キーの半分しか知りません、なぜなら、私たちは2番目のものを必要としているからです。

編集:

これまでのところ最良の答えです(コメントはできません)。 次のエラーが発生しました... "スレッド内の例外" AWT-EventQueue-0 "UnlatededOperationException"

アドバイスはありますか?

+0

UnsupportedOperationExceptionについておおよそのこと。 Accessがこの操作をサポートしていない可能性があります。グーグルでは、すべてのデータベースがこの機能をサポートしているわけではないようです。オラクル社では、たとえば、アイデンティティ列を持たないため、別のアプローチを使用しなければなりませんでした。キーを再設計するのが遅すぎない場合は、UUIDベースのキーに切り替えて、キーをJavaで生成し、データベースにキーを生成させるのではなく、データベースにプッシュすることができます。しかし、その変更を行うには遅すぎるかもしれません。 –

+0

このプロジェクトに時間がなくなりました。問題はあまりにもムハです。誰かが回避策に興味があるなら、それがある。最後に保存された君主との間で君主を救い、最後に救われた君主と同じ場合はその鍵を取得し、次に鍵を見つけるまで、最後に救われた君主などを獲得する。私のCキーは何らかの理由でうまく動作しません。キャップのみです。 lol – Relequestual

答えて

2

をトリックを行う必要がありますあなたは二つのことを行う必要があります。まず、文を準備するときや文を実行するときに、別のパラメータを渡す必要があります。あなたの文を実行した後

stmt.executeUpdate(sql, Statement.RETURN_GENERATED_KEYS); 

:あなたはのexecuteUpdate()を呼び出すときに、次の操作を行い、プリペアドステートメントを使用していない場合は

stmt = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); 

:あなたはプリペアドステートメントを使用している場合は、次の手順を実行します

ResultSet rs = stmt.getGeneratedKeys() 

これは、生成されたキーを含む結果セットを提供します。

私はこのアプローチをAccessで試していませんが、SQL ServerのID列でうまく動作します。

+0

私はODBC経由でJava 1.7のAccess 2010を使って自分自身を試しています。また、java.langも受け取っていることを確認できます。stmt.executeUpdate関数を呼び出すときにUnsupportedOperationExeption。 – Bassam

0

複合キーの両方の値を、2つの要素を持つObjectの配列に入れて返します。

また、保存したばかりのインスタンスに新しいコンポジットキーを入れて返してください。

2

はStatement.getGeneratedKeys()は...

関連する問題