jdbc + CallableStatement +Incorrectly registered parameters - JDBC JAVA

146 篇文章 0 订阅

http://objectmix.com/jdbc-java/41692-jdbc-callablestatement-incorrectly-registered-parameters.html

piernik wrote:
> Hello I'm trying to learn how to work with stored procedures in
> Oracle and java. I deal fine with ResultSets and PreparedStatement
> now I want to use functions and CallableStatement.
> I wrote my code looking at this sites:
>
>

http://andrej.racchvs.com/archives/2...rsors-in-java/
> http://www.samspublishing.com/articl...26251&seqNum=7
> http://www.cs.bris.ac.uk/maintain/Or...54/samapp2.htm
> http://www.enterprisedt.com/publicat...esult_set.html
>
> I've created a package with a function to find buss connection
> between 2 cities CREATE OR REPLACE PACKAGE cursors_pkg
> AS
> type dire_city_curs is record (
> bus_id Bus_Schedule.bus_id%TYPE,
> station_name Station.station_name%TYPE,
> arrival_tim Bus_Schedule.arrival_time%TYPE,
> departure_time Bus_Schedule.departure_time%TYPE,
> station_nr Bus_Schedule.station_nr%TYPE);
> TYPE refcursortype IS REF CURSOR return dire_city_curs;
> FUNCTION getdirect(from_city varchar2, to_city varchar2) RETURN
> refcursortype; END cursors_pkg;
>
> CREATE OR REPLACE PACKAGE BODY cursors_pkg IS
> FUNCTION getdirect(from_city varchar2, to_city varchar2) RETURN
> refcursortype IS
> mycursor refcursortype;
> BEGIN
> OPEN kurszor FOR
> select **bla bla**
> RETURN mycursor;
> END;
> END cursors_pkg;
>
> now java
>
> String usersSql = "{ call ? = cursors_pkg.getdirect(?,?) }";
> CallableStatement stmt = db.prepareCall(usersSql);
> stmt.registerOutParameter(1,OracleTypes.CURSOR);
> stmt.setString(new String("from_city"),"London");
> stmt.setString(new String("to_city"),"Paris");
>
> stmt.execute();
> ResultSet rset = (ResultSet) stmt.getObject(1);
> //or ResultSet rset = ((OracleCallableStatement)stmt).getCursor (1);
> while (rset.next()){
> System.out.println( rset.getDouble(1) +" "+ rset.getString(2));
> }
> and the effect of my efforts:
> SQLException: Incorrectly set or registered parameters.:null
> I'm puzzled. I don't understand what goes wrong. Can you give me any
> hints?
> I was sent to
> http://www.oracle.com/technology/tec...s/jdbc_faq.htm
> but I find there nothing interesting.
>
> thank you for help


I'm just thinking on-line here... try

String usersSql = "{ call ? = cursors_pkg.getdirect( from_city ?, to_city
?) }";
CallableStatement stmt = db.prepareCall(usersSql);
stmt.registerOutParameter(1,OracleTypes.CURSOR);
stmt.setString(2,"London");
stmt.setString(3,"Paris");

stmt.execute();
ResultSet rset = (ResultSet) stmt.getObject(1);
//or ResultSet rset = ((OracleCallableStatement)stmt).getCursor (1);
while (rset.next()){
System.out.println( rset.getDouble(1) +" "+ rset.getString(2));
}

based on the premise that you only want to substitute the data via the
parameters, not the parameter names.

A little further looking on the net tells me that the use of named
parameters is part of JDBC 3.0 and older drivers may not support the use of
named parameters.

--
Virgil

==========https://forums.oracle.com/forums/thread.jspa?threadID=2153866

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值