首先请问比如我有一个存储过程有一个返回值,存储过程的字符串是不是应该写成"{?=call ×××(?)}",然后再执行前使用registerOutParameter方法注册一下,是不是第一个问号就是输出参数?可是我的总是报异常。
异常信息:The requested data is not available.
能不能给我写一个执行带输出参数存储过程的例子,不胜感激!
怎样使用Java执行带输出参数的存储过程?
答案:2 悬赏:50
解决时间 2021-02-16 06:29
- 提问者网友:对着我说爱我
- 2021-02-15 22:57
最佳答案
- 二级知识专家网友:怪咖小青年
- 2021-02-16 00:13
这个是一个执行游标的存储过程,返回一个游标结果集
前面的数据库连接我就不写了
String sql="{call course(?,?)}";
创建连接,
CallableStatement call=conn.prepareCall(sql);
设置in参数
call.setString(1,"dd");
注册参数类型
call.registerOutParameter(2,OracleTypes.CURSOR);
call.executeUpdate();
取得游标结果集
Object ob1=call.getObject(2);
循环遍历
ResultSet st=(ResultSet)ob1;
while(st.next()){
String s1=st.getString(1);
String s2=st.getString(2);
}
前面的数据库连接我就不写了
String sql="{call course(?,?)}";
创建连接,
CallableStatement call=conn.prepareCall(sql);
设置in参数
call.setString(1,"dd");
注册参数类型
call.registerOutParameter(2,OracleTypes.CURSOR);
call.executeUpdate();
取得游标结果集
Object ob1=call.getObject(2);
循环遍历
ResultSet st=(ResultSet)ob1;
while(st.next()){
String s1=st.getString(1);
String s2=st.getString(2);
}
全部回答
- 1楼网友:我的任性你不懂
- 2021-02-16 01:13
1、创建带输出参数的存储过程 如: 在查询分析器中执行declare @mg nvarchar(100)
exec proc_csco_salesfctbystore 100,200,'name',@mg output
print @mg 在java中调用import java.sql.*;
public class test{
public static void main(string args[]) throws exception {//加载驱动drivermanager.registerdriver(new sun.jdbc.odbc.jdbcodbcdriver()); //获得连接
connection conn = drivermanager.getconnection("jdbc:odbc:mydata", "sa",""); //创建存储过程的对象
callablestatement c = conn.preparecall("{call proc_csco_salesfctbystore(?,?,?,?)}"); //给存储过程的第一个参数设置值
c.setint(1, 100); //给存储过程的第一个参数设置值
c.setint(2, 10000); //给存储过程的第一个参数设置值
c.setstring(3, user); //注册存储过程的第四个参数
c.registeroutparameter(4, java.sql.types.varchar); //执行存储过程
c.execute(); //得到存储过程的输出参数值
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯
• 手机登qq时,显示手机磁盘不足,清理后重新登 |
• 刺客的套装怎么选啊? |