使用sqlserver官方驅(qū)動包調(diào)用存儲過程遇到的坑及解決方法
和外部系統(tǒng)做對接,對方提供了一個存儲過程,對方為sqlserver數(shù)據(jù)庫,我方為oracle數(shù)據(jù)庫。
需求簡單來說就是調(diào)用對方的存儲過程獲得結(jié)果,轉(zhuǎn)儲到我方庫,后續(xù)在對數(shù)據(jù)進行處理。
我寫了個代碼片段做測試,用jdbc來調(diào)用對方的存儲過程,可是在調(diào)用后就直接報錯了,錯誤信息如下
com.microsoft.sqlserver.jdbc.SQLServerException: 該語句沒有返回結(jié)果集
我就不理解了,為啥用數(shù)據(jù)庫連接工具調(diào)就沒問題呢?是有結(jié)果集的呀。
瘋狂找資料,找帖子。最后終于是找到了。
解決方法:
- 換驅(qū)動包。對方數(shù)據(jù)庫是SQL server2008,我用的是 sqljdbc4-4.0 。直接換了第三方開源的SQL Server數(shù)據(jù)庫的JDBC驅(qū)動程序 jtds1.2。問題解決,調(diào)用存儲過程的時候不再出錯。
- 在存儲過程首行添加 set nocount on (這個我沒實驗,因為存儲過程沒在我手里,操作不到)
最后記錄一段jdbc調(diào)用存儲結(jié)構(gòu)的代碼,一個參數(shù),返回結(jié)果集
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 {
//調(diào)用存儲過程
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();
}
}
}
到此這篇關(guān)于用sqlserver官方驅(qū)動包調(diào)用存儲過程遇到的一個坑的文章就介紹到這了,更多相關(guān)sqlserver官方驅(qū)動包調(diào)用存儲過程內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何創(chuàng)建SQL Server 2000故障轉(zhuǎn)移群集
如何創(chuàng)建SQL Server 2000故障轉(zhuǎn)移群集...2007-01-01
SQL Server 2005作業(yè)設(shè)置定時任務(wù)
這篇文章主要介紹了SQL Server 2005作業(yè)設(shè)置定時任務(wù)的相關(guān)詳細步驟,需要的朋友可以參考下2017-01-01
sqlserver 多表查詢不同數(shù)據(jù)庫服務(wù)器上的表
sqlserver中多表查詢不同數(shù)據(jù)庫服務(wù)器上的表的實現(xiàn)方法,需要的朋友可以參考下2012-04-04
SQL統(tǒng)計連續(xù)登陸3天用戶的實現(xiàn)示例
最近有個需求,求連續(xù)登陸的這一批用戶,本文就來介紹一下SQL統(tǒng)計連續(xù)登陸3天用戶的實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下2024-05-05
在數(shù)據(jù)庫‘master’中拒絕CREATE DATABASE權(quán)限問題的解決方法
今天使用Linq To SQL,要求判斷數(shù)據(jù)庫是否存在,不存在是自動創(chuàng)建數(shù)據(jù)庫。2011-10-10
sqlserver 不能將值NULL插入列id(列不允許有空值解決)
Microsoft OLE DB Provider for SQL Server 錯誤 '80040e2f' 不能將值 NULL 插入列 'id',表 'web.dbo.dingdan';列不允許有空值。INSERT 失敗2013-06-06
sql server中批量插入與更新兩種解決方案分享(存儲過程)
對于sql 來說操作集合類型(一行一行)是比較麻煩的一件事,而一般業(yè)務(wù)邏輯復(fù)雜的系統(tǒng)或項目都會涉及到集合遍歷的問題,通常一些人就想到用游標(biāo),這里我列出了兩種方案,供大家參考2012-05-05

