广告
返回顶部
首页 > 资讯 > 数据库 >使用sqlserver官方驱动包调用存储过程遇到的坑及解决方法
  • 942
分享到

使用sqlserver官方驱动包调用存储过程遇到的坑及解决方法

2024-04-02 19:04:59 942人浏览 安东尼
摘要

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

和外部系统做对接,对方提供了一个存储过程,对方为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();
        }
    }
}

到此这篇关于用sqlserver官方驱动包调用存储过程遇到的一个坑的文章就介绍到这了,更多相关sqlserver官方驱动包调用存储过程内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

您可能感兴趣的文档:

--结束END--

本文标题: 使用sqlserver官方驱动包调用存储过程遇到的坑及解决方法

本文链接: https://www.lsjlt.com/news/34349.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作