游标程序生成sqlexception序数绑定和命名绑定不能组合

时间:2016-07-18 15:13:41

标签: plsql cursor callable-statement

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

程序是:

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

1 个答案:

答案 0 :(得分:1)

请勿使用getString,而是使用setString

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