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,就像我在我的问题中解释的代码和图片 –

相关问题