2016-07-18 5 views
0

CallableStatementとCursorsを使用して、名前が「A」から始まるstudentという名前のテーブルからpl/sqlプロシージャでレコードをフェッチするプログラムを作成しました。 SQLException:java.sql.SQLException:操作が許可されていない:通常のバインディングと名前付きのバインディングを組み合わせることはできません。 これを解決するために私を助けてください..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

代わりgetStringが、setStringを使用しないでください:

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

thnnxx..for助けて働いた – Vikalp

+0

@Vikalpそれはあなたを助けた場合答えを受け入れてupvoteしてください。 – user272735

関連する問題