java使用jdbc调用存储过程,没有返回结果集。。

问题描述

java使用jdbc调用存储过程,没有返回结果集。。
整个过程是这样的:之前的程序已经上线运行了。后来客户数据库升级,从sqlServer2005升级到sqlServer2008.当然系统也做了相应改动。我们是第三方软件,调用他们的数据库中的存储过程来查询数据。他们升级完系统和数据库之后,我们就查询数据报错。
然后最先报的错是驱动版本问题。我就到网上下了sqljdbc4.jar。替换了之后不再报驱动的问题。但是一直无结果集。于是我直接把调用存储过程的sql语句放到数据库中执行。是能查到结果的。然后,我又把sql语句换成一个简单的select语句。这下有结果集了。那么问题出在哪?该怎么改?

 Class.forName(""com.microsoft.sqlserver.jdbc.SQLServerDriver"").newInstance();     con = DriverManager.getConnection(""jdbc:sqlserver://10.4.2.10:1433;databaseName=cmp_jxt_jmpt""jmpt_open""jmpt_open*1nl0#"");//   proc_stmt = con.prepareCall(""  exec dbo.Proc_Jmpt_ReturnTemp  'bmtz''""+sfzjh+""'5 "");     proc_stmt = con.prepareCall(""select top 5  userIdloginTimerefreshtime from user_online_data"");//   proc_stmt.setString(1bmtz"");//   proc_stmt.setString(2 sfzjh);//   proc_stmt.setString(35"");     rs = proc_stmt.executeQuery();     while (rs.next()) {         String newsId = rs.getString(""userId"");         String title = rs.getString(""loginTime"");         String detName = rs.getString(""refreshtime"");//       String addDate = rs.getString(""addDate"");//       OA_BMTZ t = new OA_BMTZ();//       t.setNewsId(rs.getString(""newsId""));//       t.setTitle(rs.getString(""title""));//       t.setDetName(rs.getString(""detName""));//       t.setAddDate(rs.getString(""addDate""));//       list.add(t);     }   

代码中可以看出我的修改轨迹。
问题出在哪,请大神指点迷经。

解决方案

这是一个 java调用数据库存储过程的 简单例子 你可以看看:

http://www.sh0745.com/java/201501/21221536.html

这个是 java调用存储过程的 详解:
http://www.sh0745.com/java/201501/21221344.html

解决方案二:
感觉和驱动以及更换sql server版本无关,而是你sql查询或者数据的问题。

解决方案三:
问题已经解决了:需要在调用存储过程的语句之前加上“SET NOCOUNT ON ”。例如我的这个例子,把

 proc_stmt = con.prepareCall(""exec dbo.Proc_Jmpt_ReturnTemp  ??? "");

改为
proc_stmt = con.prepareCall(""SET NOCOUNT ON exec dbo.Proc_Jmpt_ReturnTemp ??? "");

是什么原因呢?
原来2008的驱动会关注到存储过程执行过程中返回的“影响多少行”这些信息,有这些信息存在,就会抛出空结果集异常:
在sql语句前加“SET NOCOUNT ON ”,表示不返回计数(表示受 Transact-SQL 语句影响的行数)

解决方案四:
语句中本身就有那么多空格吗?exec之前?把exec改为call呢

 proc_stmt = con.prepareCall(""  exec dbo.Proc_Jmpt_ReturnTemp  'bmtz''""+sfzjh+""'5 "");

解决方案五:
http://blog.csdn.net/java2000_net/article/details/2311956

解决方案六:
http://blog.csdn.net/www3300300/article/details/38020119

时间: 2025-01-02 04:50:59

java使用jdbc调用存储过程,没有返回结果集。。的相关文章

ASP 调用 ORACLE存储过程并返回结果集

oracle|存储过程 ASP 调用 ORACLE存储过程并返回结果集 看过网上好多ASP调用ORACLE的方法,但是没有特好特直接的东西,所以总结各家的东西最后得出的一个自己需要的方法,感觉也比较大众所以特此发布 ###################################################oracle的存储过程################################################### --创建包头create or replace pack

PostgreSQL中调用存储过程并返回数据集实例_PostgreSQL

这里用一个实例来演示PostgreSQL存储过程如何返回数据集. 1.首先准备数据表 复制代码 代码如下: //member_category create table member_category(id serial, name text, discount_rate real, base_integral integer); alter table member_category add primary key(id); alter table member_category add ch

toad-Oracle,Toad创建存储过程并返回结果集

问题描述 Oracle,Toad创建存储过程并返回结果集 --声明包头 CREATE OR REPLACE PACKAGE PACK_TEST AS --这个是游标 TYPE TESTCUR IS REF CURSOR; --这个是过程 PROCEDURE sp_test1 (EXAMID in VARCHAR2, P_CUR OUT TESTCUR ); END PACK_TEST; / --声明包体 CREATE OR REPLACE PACKAGE BODY PACK_TEST AS PR

JAVA中对存储过程的调用方法(七) 创建、并在JAVA中直接调用存储过程

七.在JAVA中创建存储过程 并且在JAVA中直接调用 import java.sql.*; public class ProcedureTest { public static void main(String args[]) throws Exception { //加载驱动 DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver()); //获得连接 Connection conn=DriverManager.getCon

ASP调用MSSQL存储过程并返回记录集源码详解

存储过程|记录集|详解 以下是asp代码(demo.asp):<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%> <!--#include file="adovbs.inc"--> <% '通用的ASP读取MSSQL存储过程代码示例 '返回临时表记录集 '带传递参数 dim conn,connstr,cmd,rs connstr = "Provider=SQLOLEDB;serv

C#调用存储过程(带返回值)和SQL Server DTS的方法

在程序开发中,我们经常要做的事就是访问资料库.有时候会调用存储过程和DTS,下面就此给出例子来说明如何实现 第一部分 调用存储过程(带入参数和取得返回值) 1.调用SQL Server的存储过程 假如我们有如下一个存储过程,很简单的实现,只是将两个传进来值做加法处理然后返回 CREATE PROCEDURE AddMethoD ( @returnvalue int OUTPUT, --返回结果 @Parameter_1 int, --参数一 @Parameter_2 int --参数二 ) AS

C#调用存储过程并返回结果

问题描述 虚心请教专家个问题:在C#中调用执行存储过程返回存储过程的结果并想与DATAGRID绑定显示,在界面上输入三个文本框内容作为存储过程的输入参数,请问代码该如何实现啊?如何与DATAGRID绑定代码是?SqlConnectionCS=newSqlConnection("Password=123456;UserID=sa;"+"InitialCatalog=xsgl_en;"+"DataSource=(local)");SqlCommand

jdbc调用存储过程问题

问题描述 从java调用存储过程,入参是数组的问题:java端:StructDescriptorsd=StructDescriptor.createDescriptor("WUTEST",con);Object[]nesta=newObject[]{null,null};STRUCTsnesta=newSTRUCT(sd,con,nesta);Object[]kisey=newObject[]{null,null};STRUCTskisey=newSTRUCT(sd,con,kisey

JDBC调用存储过程,以及存储过程 事务的使用.....

在JDBC中调用存储过程 首先就要在数据库中存在 要调用的过程  ,存储过程是一组SQL语句的集合,我们吧实现某一功能的 SQL语句集合在一起来使用,方便了用户,不光是这样,存储过程可以预编译,也就是说只要调用了一次存储过程,那么下次在调用存储过程的时候 就不需要进行再次编译了  .提高了 数据库访问的效率 .. 在 SQL  SERVER20008  中创建存储过程    语法如下        Create   Procedure   过程名字(@parameter1  int ,@para