2012-01-15 8 views
6

私はJDBC/MySQL 5.1で遊んでいます。 insertクエリを作成して、テーブルにデータを挿入し、新しく作成された行から生成されたキーを返したいとします。しかし、私は私のPKと自動増分列である "ID"によって列を参照するときに行く。なぜgetGeneratedKeys()は列名として "GENERATED_KEY"を返しますか?

PreparedStatement ps = St0rm.getInstance().getDatabase("main") 
     .prepare("INSERT INTO quests (name,minlevel,start_npc,end_npc) VALUES(?,?,?,?)", true); // creates a prepared statement with flag RETURN_GENERATED_KEYS 

// ... 

int affected = ps.executeUpdate(); 
ResultSet keys = ps.getGeneratedKeys(); 
if (affected > 0 && keys.next()) { 
    St0rm.getInstance().getLogger().warning(String.format("ID Column Name: %s", keys.getMetaData().getColumnName(1))); // says the column name is: GENERATED_KEY 

    q = new Quest(keys.getInt(1)); // column index from the generated key, no error thrown. 

    q = new Quest(keys.getInt("id")); // actual column name, line throws a SQLException 
    // ... 
} 

だから、私の質問:はなぜResultSet.getGeneratedKeysは、列名としてGENERATED_KEYを使用していますか?

答えて

3

これらの列を名前で取得しないでください。 以降、インデックス付きでのみMySQLとauto_incrementsの列が1つしかないので、 はStatement.getGeneratedKeys()によって公開可能な値を返します。

現在、MySQLサーバは は「 は後で修正する」として、私はこれをマーキングしていますなぜある可能 効率的な方法で名前でこれらの列を取得する機能を作るだろうと直接情報を返しません、できるだけ早くサーバが の情報をドライバに返すことができます。

からhere(2006年に!)。

関連する問題