2014-07-24 1 views
-1

입니다.이 클래스를 사용하여 database.create에서 데이터를 검색하는 데 사용하고, 모든 변수를 Null -> NPE로 초기화합니다. 그래서 나는 그들에 대해 논평했다. 마술처럼 작동한다. 내 질문, 왜 또는 어떻게 이런 일이? 매번 obj 클래스가 생성자로 돌아가서 모든 변수를 null로 설정하는 메서드를 사용합니까? 지식에 대한 관심이 부족합니다.이 간단한 경우 지식이 부족합니다. 감사. 이후 생성자가 변수를 null로 초기화합니다. 원인 jdbc의 NPE가

private List<String> type_list = new ArrayList<>(); 
private List<String> partid_list = new ArrayList<>(); 

는, 생성자 (주석 처리 된 코드에서) 그들을 null로 설정합니다 : 당신이 그들을 선언 할 때

답변

1

귀하의 NPE는이 라인

type_list.add((String) rs.getString("NAME")); 

에있을 것입니다.

당신은 생성자에서이 코드에 해당하면 결과 집합을 반복 할 때 TYPE_LIST을 의미

public OptionList() { 
    this.type_list = new ArrayList<String>(); 
} 

가 null는 아니고,이

private List<String> type_list = new ArrayList<String>(); 

같은 인스턴스 변수를 초기화합니다.

+0

예 .. 생성자는 인스턴스 변수로 미리 초기화하고 생성자에서 변수를 초기화하지 않는 것처럼 보입니다.이 중 더 명확합니다. 뭐하는거야? – user2300035

1

먼저

public class OptionList { 

private Connection conn; 
private List<String> type_list = new ArrayList<>(); 
private List<String> partid_list = new ArrayList<>(); 

public OptionList() { 
    //conn = null; 
    //type_list = null; 
    //partid_list = null; 
} 

public void listin_db() throws Exception, SQLException { 
    JDBC ora = new JDBC(); 

    //1. open/get connection 
    ora.openConnection(); 

    conn = ora.getConn(); 

    //2. Execute query 
    String stmnt = " select distinct PARTID, NAME " 
      + " from INVENTORY tblA " 
      + " inner join(" 
      + " select distinct part_no " 
      + " from Status)tblB on tblA.Partid = tblB.part_no "; 
    Statement statement = conn.createStatement(); 
    ResultSet rs = statement.executeQuery(stmnt); 

    while (rs.next()) { 
     type_list.add((String) rs.getString("NAME")); 
     partid_list.add((String) rs.getString("PARTID")); 
    } 

    conn.close(); 
    statement.close(); 
    ora.closeConnection(); 

} 

public List<String> getpartid_List() { 
    return partid_list; 
} 

public List<String> getType_List() { 
    return type_list; 
} 

public String test() { 
    return "HelooWourldd!"; 
} 

는}, 당신은 배열 구성원을 초기화

public OptionList() { 
    //conn = null; 
    //type_list = null; 
    //partid_list = null; 
} 

그런 다음 문자열을 추가하려고 시도하면 listin_db()에가 표시됩니다..

while (rs.next()) { 
    type_list.add((String) rs.getString("NAME")); 
    partid_list.add((String) rs.getString("PARTID")); 
} 

당신은 (지금처럼)를 선언 할 때를 초기화하거나 생성자,하지만 당신은 null로 초기화 한 다음에 액세스하려고 할 수 있어야 하나. 당신이 생성자에서 null로 TYPE_LIST 설정 때문에

+0

의미가 있습니다. 실현 될 수있는 것을 실현합니다. 감사합니다. – user2300035

관련 문제