>

DB가 있습니다. 빈 필드가있을 수 있습니다. 커서로 빈 필드에서 값을 얻으려고하면 NullPointerException 가 나타납니다. .

나는 시도 - 캐치와 솔루션 발견

   try {
        subject.setName(cursor.getString(2));
    } catch (NullPointerException e) {}
    try {
        subject.setTrainer(cursor.getString(3));
    } catch (NullPointerException e) {}
    try {
        subject.setLocation(cursor.getString(4));
    } catch (NullPointerException e) {}

그러나 나는 그것을 좋아하지 않는다. 더 매력적인 해결책이 있습니까?


  • 답변 # 1

    커서 객체가 null이면 null 포인터 예외가 발생합니다. 객체가 null이 아닌 경우 객체 인수가 비어 있거나 null인지 확인할 수 있습니다. 이러한 방법으로, 당신은 그것을 할 수 있습니다.

    if(cursor != null) {
        // cursors argument you can check here.
        if(cursor.getString(2) != null) {
            subject.setName(cursor.getString(2));
        }
        ---
        ---
    }
    
    

  • 답변 # 2

    if (cursor != null)
    {
        subject.setName(cursor.getString(2));
        subject.setTrainer(cursor.getString(3));
        subject.setLocation(cursor.getString(4));
    }
    
    

    이 작동합니까? 커서가 널 (null)이 아닌지 확인하는 중입니까?

  • 답변 # 3

    다음과 같이 널값을 확인하십시오.

       if (cursor != null) {//if cursor can achieve null value. I don't know your code before
    String str2 = cursor.getString(2);
        if (str2 != null) {
            //...
        subject.setName(str2);
            }
            }
    
    

  • 답변 # 4

    둘 중 하나 :

    <올>

    subject  null입니다.

    cursor  null이거나

    subject.setName()   NullPointerException 를 던졌습니다  인수가 null 인 경우

    제공 한 작은 정보만으로는 어떤 정보를 말할 수 없지만 스택 추적에서 알려줄 것입니다. try/catch 없이 이러한 조건 중 하나를 방어하기가 쉽습니다.

  • 답변 # 5

    getString (index)을 호출하기 전에값을 확인할 수 있습니다.

    if( !cursor.isNull(2) ){
        subject.setName(cursor.getString(2));
    }
    
    

    자세한 내용은 여기 API를 참조하십시오.

  • 이전 java - 열에서 고유 한 값을 얻는 방법?
  • 다음 sql server - SSDT 게시 프로파일을 재정의합니다 ConnectionString