java调用存储过程
在做java调用sqlserver存储过程时遇到了各种各样的问题,不过在不懈的努力之下这些问题还是得以解决了。今天总结一下遇到的问题以及解决的方法。
首先调用存储过程的方法大家都很清楚:
String sql="{call dbo.proc_getdata(?)}";//存储过程名以及参数,?为参数占位符。
CallableStatement cstmt=connection.prepareCall(sql);
cstmt.setInt(1, 1);
ResultSet rs=cstmt.executeQuery();//返回结果集
while(rs.next()){
}
如果这里的dbo.proc_getdata存储过程没有用到临时表或是表变量,获得想要的结果集没有任何问题。但是存储过程里如果用到了临时表或者是表变量,
那么结果就有点出乎预料了。rs总是没有返回值。这是为什么呢?虽然直接也没有找到原因,但是找到了解决的办法。
首先在存储过程的开始和结尾分别加上set nocount on和set nocount off。然后用到临时表的地方使用自动执行sql语句的方式:
if (object_id('dbo.proc_getdata', 'P') is not null)
drop proc dbo.proc_getdata
go
create proc dbo.proc_getdata (
@No int --输入参数
)
as
begin
set nocount on
IF EXISTS(SELECT * FROM TEMPDB..SYSOBJECTS WHERE ID = OBJECT_ID('TEMPDB..#Student'))
DROP TABLE #Student --临时表
create TABLE #Student (
NOCD int NOT NULL ,
Name nvarchar(32) NOT NULL ,
PRIMARY KEY(NOCD)
)
declare @sql1 VARCHAR(8000)
set @sql1=' '
set @sql1='
insert into #Student
select * from students'
exec(@sql1)
set nocount off
end
java调用存储过程的更多相关文章
- clob字段的值插入和查询N种方法【包括java调用存储过程传入clob参数】
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import jav ...
- Oracle数据库基本操作 (五) —— 使用java调用存储过程
一.环境准备 登录Oracle数据库scott账号,利用emp进行操作. 1.创建 proc_getyearsal 存储过程 -- 获取指定员工年薪 create or replace procedu ...
- java调用存储过程(stored procedures)的HelloWorld例子
1.java调用存储过程(stored procedures)的HelloWorld程序 有点数据 库基础的人都知道.存储过程(stored procedures)和java没什么关系.它是一段纯粹的 ...
- java调用存储过程和函数
以对表test进行增,删,改,查进行说明:1.新建表test create table TEST ( TID NUMBER not null, TNAME VARCHAR2(32), TCODE VA ...
- 【转】java调用存储过程和函数
一.概述 如果想要执行存储过程,我们应该使用 CallableStatement 接口. CallableStatement 接口继承自PreparedStatement 接口.所以CallableS ...
- java 调用存储过程
1.java 中调用pl/sql 中的存储过程 call 存储过程的名称(参数名称,参数名称) 在service 层中调用 存储过程 String sql=" call proc_ ...
- java调用存储过程、存储函数
需要用到的接口 接口 CallableStatement JDK文档对改接口的说明: public interface CallableStatement extends PreparedStatem ...
- Java调用存储过程小结
学生在学习jdbc的时候,会问到怎么调用存储过程,现在将java调用oracle存储过程的示例总结如下.(关于调用sqlserver的存储过程将在下次进行小结请关注) 一:无返回值的存储过程 存储过程 ...
- Java 调用存储过程、函数
一.Java调用存储Oracle存储过程 测试用表: --创建用户表 create table USERINFO ( username ) not null, password ) not null ...
随机推荐
- Unity 移动端触摸屏操作
Unity 触屏操作 当将Unity游戏运行到IOS或Android设备上时,桌面系统的鼠标左键可以自动变为手机屏幕上的触屏操作,但如多点触屏等操作却是无法利用鼠标操作进行的.Unity的Input类 ...
- jquery插件-表单验证插件-demo
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- struts2 CVE-2014-0050(DoS), CVE-2014-0094(ClassLoader manipulation) S2-20 DoS attacks and ClassLoader manipulation
catalog . Description . Effected Scope . Exploit Analysis . Principle Of Vulnerability . Patch Fix 1 ...
- dedecms /member/reg_new.php SQL Injection Vul
catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 Dedecms会员中心注入漏洞 2. 漏洞触发条件 http://127 ...
- django redis操作
from utils.redis.connect import redis_cache as rr.flushdb() 列表操作 r.lpush("name", xxxx) or ...
- 感受身边app
第一款:高考小秘书.http://www.liqucn.com/rj/519571.shtml.下载链接.我认为产品最大的优势在于对高考生非常有利,实用价值大,对于每年的高考生来说,高考资讯和大学资讯 ...
- 捉襟见肘之 CoreImage初级自制相机图片效果
CoreImage.framework /* CoreImage - CoreImage.h Copyright (c) 2014 Apple, Inc. All rights reserved. * ...
- tomcat密码的坑
<role rolename="tomcat"/> <role rolename="role1"/> <user username ...
- 9.13 JS循环
循环:循环操作某一个功能(执行某段代码) 四要素: 循环初始值 循环条件 状态改变 循环体 for 穷举 迭代 i++;等价于i=i+1; ++I;等价于 ...
- WinForm------TextEdit控件去掉换行符
//将换行转为空格 string str = this.DetailEdit.Text.Replace("\r\n"," ");