sql >> データベース >  >> RDS >> PostgreSQL

postgresqlでバッチ挿入された行からシリアルIDを取得する

    このようなものが機能するはずです:

    // tell the driver you want the generated keys
    stmt =  c.prepareStatement("INSERT ... ", Statement.RETURN_GENERATED_KEYS);
    
    stmt.executeBatch();
    
    // now retrieve the generated keys
    ResultSet rs = stmt.getGeneratedKeys();
    while (rs.next()) {
     int id = rs.getInt(1);
     .. save the id somewhere or update the items list 
    }
    

    私は思う(私はそうではない 確かに!)キーは生成された順序で返されます。したがって、ResultSetの最初の行は、処理しているリストの最初の「アイテム」にマップする必要があります。しかし、それを確認してください!

    編集

    それでも問題が解決しない場合は、値が生成される実際の列を指定してみてください。

    stmt =  c.prepareStatement("INSERT ... ", new String[] {"id"});
    



    1. jpaでシーケンスをリセット

    2. スクリプトを使用してExcelシートを一時テーブルに取得します

    3. エラーコード:1062。キー「PRIMARY」のエントリ「1」が重複しています

    4. ifステートメントpostgresqlを正しく使用する方法