2017-08-11 9 views
2

私はこのコードサポートされていない機能の例外fetchDmlReturnParamsは

String sql = "insert into colortable (string, color, cid) values (?,?,?)"; 
PreparedStatement ps = conn.prepareStatement(sql,keyProperties.toArray(new String[0])); 
ps.executeBatch(); 
final ResultSet rst = ps.getGeneratedKeys(); 
while (rst.next()) { 
    final BigDecimal bigDecimal = rst.getBigDecimal(1); 
    if (bigDecimal != null) { 
     ids.add(bigDecimal.intValueExact()); 
    } 
    } 

を持っています。

Caused by: java.sql.SQLException: Unsupported feature 
at oracle.jdbc.driver.OracleStatement.fetchDmlReturnParams(OracleStatement.java:4959) ~[ojdbc6.jar:11.2.0.4.0] 
at oracle.jdbc.driver.OracleReturnResultSet.next(OracleReturnResultSet.java:63) ~[ojdbc6.jar:11.2.0.4.0] 

問題がojdbcドライバのこの部分にあることがわかりました。関数this.statement.fetchDmlReturnParams(特に

if (!this.statement.returnParamsFetched) { 
     this.statement.fetchDmlReturnParams(); 
     this.statement.setupReturnParamAccessors(); 
} 

)。は実装されていません。

今私の質問は、特にreturnParamFetchedをtrueに設定することができますこの関数を呼び出すことを避けるためにですか?

答えて

1

私のアプリケーションが実際に実行するコードは、私はこのコードのPICEをテストするためのテストケースを作成

try { 
    final String sql = "insert into colortable (string, color, cid) values (?,?,?)"; 
    final PreparedStatement ps = conn.prepareStatement(sql, new String[] {"ID"}); 
    ps.setString(1, "TEST1"); 
    ps.setString(2, "FFFFFF"); 
    ps.setInt(3, 1); 
    ps.addBatch(); 
    ps.setString(1, "TEST2"); 
    ps.setString(2, "AAAAAA"); 
    ps.setInt(3, 1); 
    ps.addBatch(); 
    ps.executeBatch(); 
    final ResultSet rst = ps.getGeneratedKeys(); 
    rst.getMetaData(); 
    if (rst != null){ 
    while (rst.next()) { 
     final BigDecimal bigDecimal = rst.getBigDecimal(1); 
     System.out.println(bigDecimal); 
     Assert.notNull(bigDecimal); 
    } 
    } 
    ps.close(); 
}catch (final SQLException e){ 
    System.out.println(e); 
}finally { 
} 

ですが、私は別のojdbcで試してみて、私は、最新のojdb8が問題を解決することを見つけます。

関連する問題