用sqlserver官方驱动包调用存储过程遇到的一个坑

和外部系统做对接,对方提供了一个存储过程,对方为sqlserver数据库,我方为oracle数据库。
需求简单来说就是调用对方的存储过程获得结果,转储到我方库,后续在对数据进行处理。

我写了个代码片段做测试,用jdbc来调用对方的存储过程,可是在调用后就直接报错了,错误信息如下

com.microsoft.sqlserver.jdbc.SQLServerException: 该语句没有返回结果集

我就不理解了,为啥用数据库连接工具调就没问题呢?是有结果集的呀。

疯狂找资料,找帖子。最后终于是找到了。

解决方法:

  1. 换驱动包。对方数据库是SQL server2008,我用的是 sqljdbc4-4.0 。直接换了第三方开源的SQL Server数据库的JDBC驱动程序 jtds1.2。问题解决,调用存储过程的时候不再出错。
  2. 在存储过程首行添加 set nocount on (这个我没实验,因为存储过程没在我手里,操作不到)

最后记录一段jdbc调用存储结构的代码,一个参数,返回结果集

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Test {
final static String SERVERURL = "jdbc:jtds:sqlserver://127.0.0.1:1433;DatabaseName=XXX";
final static String SERVERDriver = "net.sourceforge.jtds.jdbc.Driver";
final static String SERVERUSERNAME = "username";
final static String SERVERPASSWORD = "password";
public static void main(String[] args) {
try {
//调用存储过程
Class.forName(SERVERDriver);
Connection conn = DriverManager.getConnection(SERVERURL, SERVERUSERNAME, SERVERPASSWORD);
System.out.println("sql server连接成功");
String call = "{call 存储过程名称(?)}";
CallableStatement callableStatement = conn.prepareCall(call);
callableStatement.setString(1, "2022-10-13");
ResultSet rs = callableStatement.executeQuery();
while(rs.next()) {
System.out.println(rs.getString("aaa"));
System.out.println(rs.getString("bbb"));
System.out.println(rs.getString("ccc"));
System.out.println(rs.getString("ddd"));
}
callableStatement.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

作者:meowxue

出处:https://www.cnblogs.com/meowxue/p/16786677.html

版权:本作品采用「」许可协议进行许可。

posted @   炸天帮李白  阅读(112)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示
more_horiz
keyboard_arrow_up light_mode palette
选择主题