在Java中调用存储的函数错误

时间:2012-11-02 09:24:17

标签: java oracle function stored-procedures jdb

我试图用Java调用存储的函数。函数没有包,它放在用户(模式)USER下并返回一个游标。我试着打电话给它,但这些都没有。

第一个

Query query = coreDao.getEntityManager().createNativeQuery("{call USER.gen_rephead_sm_task_report(?, ?) }");
query.setParameter(1, dateFrom);
query.setParameter(2, dateTo);
List<?> queryResult = query.getResultList();

我得到了not a procedure or not defined

我也用

尝试了这种方法
select gen_rephead_sm_task_report(?, ?) from dual

作为createNativeQuery参数,但结果相同。

第二个

Connection connection = dataSource.getConnection();//javax.sql.DataSource
CallableStatement statement = connection.prepareCall("{? = call USER.gen_rephead_sm_task_report(?, ?) }");
statement.registerOutParameter(1, OracleTypes.CURSOR);//oracle.jdbc.OracleTypes
statement.setDate(2, new java.sql.Date(dateFrom.getTime()));
statement.setDate(3, new java.sql.Date(dateTo.getTime()));
statement.executeQuery();
ResultSet set = ((OracleCallableStatement) statement).getCursor(1);

我在最后一行得到ClassCastException(显然OracleCallableStatement没有实现CallableStatement)。我在这里使用哪种类型?

1 个答案:

答案 0 :(得分:0)

好的,所以我找到了一个解决我问题的链接(iDevelopment)。这是我用过的东西

connection = dataSource.getConnection();
CallableStatement statement = connection.prepareCall(TIMESHEET_QUERY);
statement.registerOutParameter(1, OracleTypes.CURSOR);
statement.setDate(2, new java.sql.Date(dateFrom.getTime()));
statement.setDate(3, new java.sql.Date(dateTo.getTime()));
statement.execute();

ResultSet set = (ResultSet) statement.getObject(1);

所有内容都来自javax.sql.*,因此不需要Oracle Specific API。