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 つの項目を取得しています。いずれかの項目が null の場合、空白で埋めようとしています。しかし、これを実行してコンボボックスに追加すると、null 値が空白に置き換えられていないことがわかります!!! null 値はすべて「null」として表示されます。たとえば、

FirstName = "ジョン"、MiddleName=""、LastName="ラクスター"

ご覧のとおり、MiddleName は null です。私が期待しているのは

「ジョン・ラクスター」

私が得るのは「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 に答える