不支持的功能异常fetchDmlReturnParams

时间:2017-08-11 15:33:20

标签: java ojdbc

我有这段代码

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());
    }
  }

当代码到达 rst.next 时,我获得以下异常。

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驱动程序的这一部分。

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

特别是函数 this.statement.fetchDmlReturnParams(); 未实现。

现在我的问题是避免调用此函数,特别是returnParamFetched可以设置为true吗?

1 个答案:

答案 0 :(得分:1)

我的应用程序真正执行的代码是

class Program
{
    private static string str1 { get; set; }
    private static string str2 { get; set; }
    private static string str3 { get; set; }
    private static string ConceptOrder { get; set; }

    static void Main(string[] args)
    {
        str1 = "string1";
        str2 = "string2";
        str3 = "string3";
        ConceptOrder = "2, 3, 1";
        Console.WriteLine(ConceptValues(ConceptOrder));
        // output: string2 string3 string1
        Console.ReadKey(true);
    }
}

我创建了一个测试用例来测试这个代码,我尝试使用不同的ojdbc,我发现最新的ojdb8解决了这个问题。