2

自動生成キーとして定義された 1 つの列を持つテーブルがあります。次のコードが実行されると、新しいキーが生成されることを期待していますが、そうではありません。1 行が挿入されますが、ResultSetps.getGeneratedKeys()は空です。

DB2: SQLLIB_ADCL_V97FP1 を使用しています。

        conn = getConnection();
        conn.setAutoCommit(false);
        String query = 
            "INSERT INTO MyTable " +
            "  (messe_nr, land5, variable_nr, bezeichnung_en, bezeichnung_de) " +
            "VALUES (?,?,?,?,?)";

        PreparedStatement ps = conn.prepareStatement(query, Statement.RETURN_GENERATED_KEYS);
        ps.setInt(1, fair.getFairId());
        ps.setString(2, variable.getCountryCode());
        ps.setInt(3, variable.getSort());
        ps.setString(4, variable.getLabel_en());
        ps.setString(5, variable.getLabel_de());

        log.debug(query);
        int count = ps.executeUpdate();
        if(count == 1) {
            ResultSet rs = ps.getGeneratedKeys();
            if(rs.next()) {
                variable.setId(rs.getBigDecimal(1).intValue());
            } else {
                log.error("Could not get autogen key after variable insert");
                throw new AVMSException(1500);
            }
            rs.close();
        }
        log.debug("inserted " + count);

        ps.close();
        conn.commit();

アップデート

プロジェクトをテスト サーバーにデプロイしたところ、問題は発生しません。開発システムで何かが壊れています。私は1日か2日前にJavaアップデートをインストールしました - 1.7.0_13 - それはそのような問題を引き起こす可能性があります:-/ ?

4

2 に答える 2

6

これを試してみてください、それは私のために働いています:

prepStmt = con.prepareStatement(sql, new String[]{"YOUR_ID_FIELD"});

//Setting Bind-Variables

prepStmt.executeUpdate();

        rs = prepStmt.getGeneratedKeys();  
        while (rs.next())
        {
            tAdresse.getAdressid().setValue(rs.getInt(1));
            System.out.println("Key: " + tAdresse.getAdressid().getIntValue());
        }
于 2013-02-08T06:55:36.190 に答える