2

我有用於過濾 參數很多存儲過程我有2個的EditText Cardnumber和Carcode兩者thoose的需要填補之前,我可以得到任何結果如何在某些參數排除或的setNull如果EditText上是空的

所以我的問題是如何獲得的結果,如果其中一個是空的,或者如果它們都是空

protected String doInBackground(String... params) { 
       try { 
        Connection con = connectionClass.CONN(); 
        if (con == null) { 
         z = "Error in connection with SQL server"; 
        } else { 
         doerTicket = setingPreferences.getString("doerTicket", ""); 
         CallableStatement cs = null; 
         String query = "exec [file].[usp_getParts] \[email protected]_ItemNumber = ?,\[email protected]_DoerTicket = ?,\[email protected]_CarItemNumber = ?; 
         cs = con.prepareCall(query); 
         cs.setString(1, Cardnumber);//edittext(@p_ItemNumber) 
         cs.setString(2, doerTicket); 
         cs.setString(3, Carcode);//edittext(@p_CarItemNumber) 
         ResultSet rs = cs.executeQuery(); 
         while (rs.next()) { 

        } 
       } catch (Exception ex) { 
        z = "Exceptions"; 
       } 
       return z; 

      } 
     } 

我目前在SP利用參數

ALTER PROCEDURE [file].[usp_getParts] 
    , @p_ItemNumber VARCHAR (3000) = NULL 
    , @p_CarItemNumber NVARCHAR (20) = NULL 
    , @p_DoerTicket VARCHAR (200) = NULL 

與itemnumber with itemnumber 與carcode with carcode

或者我還可以通過使用

EXEC @return_value = [file].[usp_getParts] 
     @p_CarItemNumber = NULL, 
     @p_ItemNumber = N'*****', 
     @p_DoerTicket = N'0x01000000f475bad9ea7d1f1d6b142a1b8cc95ce74b3f387cb1388a80097f35a8c1e9131ffa7f4b833553bede4a3abec49254373d06fb3294c60c6d24', 
     @p_SearchSessionID = @p_SearchSessionID OUTPUT, 
     @p_TotalRows = @p_TotalRows OUTPUT 
+0

不知何故,你的問題很混亂:你寫這兩個領域都必須填補,但你問如何得到結果,如果其中一個或兩個都是空的!? – Tyron78

+0

只是澄清:你是否正在尋找一種方法來避免設置語句參數,如果任何'params'爲空? –

+0

是的,因爲我需要讓他們都填充之前,我可以從中得到結果 –

回答

0

得到的結果,我不認爲你可以從聲明中刪除任何參數;我建議你使用通配符來設置未傳遞給函數的聲明參數:

CallableStatement cs = null; 
String query = "exec [file].[usp_getParts] \[email protected]_ItemNumber = ?,\[email protected]_DoerTicket = ?,\[email protected]_CarItemNumber = ?"; 
cs = con.prepareCall(query); 
cs.setString(1, Cardnumber != null ? Cardnumber : "*");//edittext(@p_ItemNumber) 
cs.setString(2, doerTicket != null ? doerTicket : "*"); 
cs.setString(3, Carcode != null ? Carcode : "*");//edittext(@p_CarItemNumber) 
ResultSet rs = cs.executeQuery(); 

這樣你可以有一個單一的查詢與任何濾波器組合來提取數據。

如果你不想聯繫數據源,如果一些過濾器沒有通過,你可以簡單地檢查他們,然後準備語句並返回一個錯誤字符串(或者更好地拋出一個應用程序異常)。

+0

我仍然沒有得到任何結果,因爲它看起來像Carcode不支持只是通配符,所以做一些其他參數 所以有一些如何我可以使用@p_CarItemNumber = NULL,因爲這適用於所有參數 –

+0

對不起,我不明白您的意見 –

+0

我不知道如何解釋這一點,因爲我試圖解釋我的carcode不支持通配符,以便一個不工作,而不是它應該使用@p_CarItemNumber = NULL,就像我在我的問題中解釋的代碼和圖片 –

相關問題