2

请看下面的代码

public List<String> getNames()
{
List<String> names = new ArrayList();


try
{
    createConnection();

    Statement st = con.createStatement();
    ResultSet rs = st.executeQuery("select NULLIF(names,' '),NULLIF(middleName,' '),NULLIF(lastName,' ') from PhoneData order by names asc");

    while(rs.next())
    {
        String fullName = rs.getString(1)+" "+rs.getString(2)+" "+rs.getString(3);
        names.add(fullName);
    }

    return names;

}
catch(Exception e)
{
    e.printStackTrace();
    return null;
}
finally
{
    closeConnection();
}

}

我正在使用 Apache Derby,嵌入式版本。

我在这里检索 3 个项目,名字、中间名和姓氏。如果任何项目为空,那么我正在尝试用空格填充它。但是,当我运行它并将其添加到组合框中时,我可以看到它没有用空格替换空值!!!所有空值都显示为“空”。例如,

FirstName = "John", MiddleName="", LastName="Laxter"

如您所见,MiddleName 为空。我期待的是

“约翰·拉克斯特”

我得到的是“John null Laxter”!!!。为什么是这样?请帮忙!我在使用 MS SQLServer 时没有遇到这个问题(然后 NULLIF 是 isNull())。这里有什么问题?请帮忙!!

4

3 回答 3

3

更好地使用COALESCE

SELECT COALESCE(names,' '),...
于 2012-10-14T14:34:43.290 回答
2

试试这个:

select 
coalesce(names,' '),
coalesce(middleName,' '),
coalesce(lastName,' ') 
from PhoneData
order by names asc
于 2012-10-14T14:38:35.613 回答
1
select 
    coalesce(names,' '),
    coalesce(middleName,' '),
    coalesce(lastName,' ') 
from PhoneData 
order by names asc

nullif()不按你的想法做。

于 2012-10-14T14:36:35.837 回答