2016-11-10 67 views
0

我訪問一個存儲過程具有一個參數的SQL服務器上,我可以很容易地在SQL客戶端上運行如下:調用MSSQL存儲過程中的Java

exec sp_name "2016/11/01" 

現在我想做的事在java中同樣的事情。

PreparedStatement ps = conn.prepareStatement("sp_name ?"); 
ps.setString(1, "2016/11/01"); 
ResultSet rs = ps.executeQuery(); 

rs我可以看到列的名稱,但返回零行。我想這是因爲存儲過程的參數。我在這裏錯過了什麼嗎?

+0

什麼是一個參數的類型?無論如何,我會建議你使用[CallableStatement](https://docs.oracle.com/javase/7/docs/api/java/sql/CallableStatement.html)。此外,問題可能出現在SP本身...... PS:更好地使用ISO格式化日期格式,在SQL Server調用中使用格式「YYYYMMDD」或「YYYY-MM-DD」。 –

+0

嗯,我不知道這個類型,因爲我沒有訪問SP的來源。 –

+0

也許嘗試使用'(java.sql。)date'參數? –

回答

0

下面是最終的工作代碼:

String date= "2016/11/01" 
String queryString "exec sp_dmp_pub_status ?"; 
PreparedStatement ps = conn.prepareStatement(queryString);   
SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd"); 
Date parsed = format.parse(date); 
java.sql.Date sqlDate = new java.sql.Date(parsed.getTime()); 
ps.setDate(1, sqlDate);   
ResultSet rs = ps.executeQuery();