【问题标题】:cursor program generating sqlexception ordinal binding and named binding cannot be combined游标程序生成sqlexception序数绑定和命名绑定不能合并
【发布时间】:2016-07-18 15:13:41
【问题描述】:

我创建了一个程序,使用 CallableStatement 和 Cursors 从名为 Student 的表中获取记录,该表的名称从 'A' 开始,带有 pl/sql 过程。程序给出 SQLException: java.sql.SQLException: operation not allowed : 序数绑定和命名绑定不能合并! 请帮我解决这个问题..

程序是:

create or replace procedure get_StudDetails(mycur out sys_refcursor,cond in varchar)
as
begin
open mycur for
select * from Student where stname like cond;
end;
/

java程序是:

import java.sql.*;
import oracle.jdbc.driver.*;
class CursorTest
{
public static void main(String s[])
{
try
{
Connection con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","rt","pwdd");
CallableStatement cs=con.prepareCall("{call get_StudDetails(?,?)}");
cs.getString(2+"A%");
cs.registerOutParameter(1,OracleTypes.CURSOR);
cs.execute();
System.out.println("procedure invoked");
ResultSet rs=(ResultSet)cs.getObject(1);
while(rs.next())
{
System.out.println(rs.getString(1)+"\t"+rs.getString(2)+"\t"+rs.getString(3)+"\t"+rs.getString(4));
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
}

【问题讨论】:

    标签: plsql cursor callable-statement


    【解决方案1】:

    不要使用getString,而是使用setString

    CallableStatement cs=con.prepareCall("{call get_StudDetails(?,?)}");
    cs.registerOutParameter(1,OracleTypes.CURSOR);
    cs.setString(2, "A%");
    cs.execute();
    

    【讨论】:

    • @Vikalp 如果对您有帮助,请接受并投票赞成答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-08
    • 1970-01-01
    • 1970-01-01
    • 2012-04-27
    相关资源
    最近更新 更多