问题描述
- 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