"java.sql.SQLException:不支持的特性“是什么意思?

您所在的位置:网站首页 不是java的特性 "java.sql.SQLException:不支持的特性“是什么意思?

"java.sql.SQLException:不支持的特性“是什么意思?

2024-07-08 22:04| 来源: 网络整理| 查看: 265

我想说的是,这个特性在任何版本的JDBC驱动程序中都不受支持,而且永远不会被支持。这种情况下的数据库版本与此无关。

我说不出为什么会有一个setCursor()方法在OraclePreparedStatement中声明。我想这是API设计中的一个错误。实际上,如果您编译了任何试图调用setCursor()的代码,就会得到一个弃用警告。

代码语言:javascript复制C:\>javac -Xlint JavaRefCursorTest.java JavaRefCursorTest.java:28: warning: [deprecation] setCursor(int,ResultSet) in OraclePreparedStatement has been deprecated ((OracleCallableStatement)cstmt2).setCursor(1, rSet); ^ 1 warning

此弃用警告表示Oracle计划在未来删除此方法。

我还使用Oracle12cJDBC驱动程序(ojdbc7.jar)从我对你之前的一个问题的回答运行了我的我对你之前的一个问题的回答类。最终结果只是略有不同:调用setCursor()时引发的异常类型是java.sql.SQLFeatureNotSupportedException而不是java.sql.SQLException。因此,升级JDBC驱动程序JAR不会有帮助。

在您的例子中,我看不出为什么要将引用游标从数据库中获取并放入JDBC ResultSet,而只是将相同的ResultSet直接传递回数据库。您可以使用PL/SQL块直接使用ref游标调用该过程,如下所示:

代码语言:javascript复制String plsql = "DECLARE" + " l_curs SYS_REFCURSOR; " + "BEGIN" + " OPEN l_curs FOR" + " SELECT e.department_id , e.last_name ," + " e.salary FROM employees e , (SELECT department_id ," + " MAX(salary) AS maxSal FROM employees GROUP BY department_id)" + " m WHERE e.department_id = m.department_id" + " AND e.salary = m.maxSal ORDER BY e.salary;" + "" + " HR.EMP_PKG.print_max_sal_all_dept(l_curs, ?);" + "END;" PreparedStatement stmt = conn.prepareStatement(plsql); stmt.registerOutParameter(1, java.sql.Types.NUMERIC); stmt.execute();


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3