Java 如果edittext为空,如何在某些参数上排除或设置NULL

Java 如果edittext为空,如何在某些参数上排除或设置NULL,java,sql-server,stored-procedures,parameters,callable-statement,Java,Sql Server,Stored Procedures,Parameters,Callable Statement,我有一个存储过程,其中包含许多用于过滤的参数 我有2个edittext Cardnumber和Carcode,在我得到任何结果之前,这两个都必须填写 所以我的问题是,如果其中一个是空的,或者两个都是空的,我如何得到结果 protected String doInBackground(String... params) { try { Connection con = connectionClass.CONN();

我有一个存储过程,其中包含许多用于过滤的参数 我有2个edittext Cardnumber和Carcode,在我得到任何结果之前,这两个都必须填写

所以我的问题是,如果其中一个是空的,或者两个都是空的,我如何得到结果

 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] \n@p_ItemNumber = ?,\n@p_DoerTicket = ?,\n@p_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 带车号

或者我也可以通过使用

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

我认为不能从语句中删除任何参数;我建议您使用通配符设置未传递给函数的语句参数:

CallableStatement cs = null;
String query = "exec [file].[usp_getParts] \n@p_ItemNumber = ?,\n@p_DoerTicket = ?,\n@p_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();
通过这种方式,您可以使用任何筛选器组合进行单个查询以提取数据


如果您不想在某些筛选器未通过时联系数据源,您只需在准备语句之前检查它们并返回错误字符串(或者最好抛出应用程序异常)。

不知何故,您的问题令人困惑:您写的两个字段都必须填写,但是你会问如果其中一个或两个都是空的,你是如何得到结果的!?只是澄清一下:如果任何
params
为空,您是否在寻找一种避免设置语句参数的方法?是的,这是因为我需要先将它们都填充,然后才能从中获得结果it@MarcoStramezzi是的,所以如果我的edittext为空,它不会填充参数。我发布了2张图片,这可能会更好地了解我正在尝试的内容to doi仍然没有得到任何结果,因为Carcode不支持的似乎只是通配符,其他一些参数也是如此,所以有一些方法我可以使用@p_CarItemNumber=NULL来代替,因为这适用于所有参数。我不理解你的评论。我不知道在解释我的Carcode时,如何解释这个问题不要支持通配符,这样它就不能工作,而是应该使用@p_CarItemNumber=NULL,就像我在问题中对代码和图片所解释的那样。您是否尝试将NULL
Carcode
设置为第三个参数?这不管用吗?我还发现,
CallableStatement
支持一种方法:它可以帮助您吗?
cs.setString(4,Cardnumber!=null?Cardnumber:null)//edittext(@p_CarItemNumber)
不起作用,setnull仅支持integer varchar NULL等数据类型,因此我无法在其中使用Cardnumber