文章詳情頁
使用sqlserver官方驅(qū)動包調(diào)用存儲過程遇到的坑及解決方法
瀏覽:117日期:2023-03-06 14:25:34
和外部系統(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)文章希望大家以后多多支持!
標(biāo)簽:
MsSQL
排行榜
