2012-10-03 3 views
0

이 메서드를 만들었지 만 메서드 호출을 시도하면 null 포인터 예외가 반환됩니다. 아무도 나에게 뭐가 잘못 됐는지 말해 줄 수 있니? 나를Java SQL 연결, 쿼리 선택

public Talent SearchTalentQuery(int talentID){ 
    String SearchTalentString = "SELECT * FROM TALENT WHERE TALENTID = "+talentID+";"; 
    Talent talent=null; 
    try{ 
     //error in select query 
     if(getOracleXEConnection()!=null){ 

      Statement statement = conn.createStatement(); 
      ResultSet rs = statement.executeQuery(SearchTalentString);      
        while(rs.next()){ 
        talent.setTalentName(rs.getString("talentname")); 
        talent.setTalentFocus(rs.getString("maintalentfocus")); 
        talent.setTalentNationality((rs.getString("nationality"))); 
        talent.setTalentGroup(rs.getString("talentgroup")); 
        talent.setTalentHiredate(rs.getString("hiredate")); 
        talent.setTalentAge(Integer.parseInt(rs.getString("age"))); 
        talent.setTalentID(Integer.parseInt(rs.getString("talentid"))); 
        } 

      rs.close(); 
      statement.close(); 
      conn.close(); 


      return talent; 
     } 
     else{ 
      return null; 
     } 
    } 
    catch(SQLException | NumberFormatException e){ 
     e.printStackTrace(); 
    } 
    return null; 

답변

2

전체 코드가 인재 오브젝트의 메모리를 초기화하지 않기 때문에. 재능 객체의 메모리를 초기화해야합니다.

사용 : 재능 재능 = 새로운 재능(); 의 위치에 재능 재능 = null;

문제가 해결 될 수도 있습니다.

http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html

마지막으로, 대회, searchTalentString는 소문자로 시작해야 ...

5

도와 줘요 당신은에 할당 할 Talent 개체를 인스턴스화하지 있습니다.

Talent talent=null; ... talent.setTalentName(... 

당신의 코멘트를 해결하기 위해, 당신은
널 포인터에 talent 참조를 초기화하는 이야. 개체를 인스턴스화하고 해당 개체에서 메서드를 호출해야합니다.

제약 조건에 따라 메서드에서 Talent 개체를 반환하거나 각 반복을 통해 새 개체를 만들고 이러한 개체 컬렉션을 반환 할 수 있습니다.

+0

은 'Talent talent = null;'입니까? – user1711194

+1

'재능있는 재능 = null' 이것은 'null'이고 객체가 없다는 것입니다. 어떻게 메소드를 호출 할 수 있습니까? 그것은'null'입니다. 이것은'NullPointerException'이 호출 한 것입니다. – Elbek

3

그냥

while(rs.next()){ 
talent = new Talent(); //or whatever 
talent.setTalentName(rs.getString("talentname")); 

...

0

변경에

String SearchTalentString = "SELECT * FROM TALENT WHERE TALENTID = "+talentID+";"; 
Talent talent=new Talent(); 

또는이 같은 ... 그동안 블록

의 시작 부분에 당신의 재능 객체를 생성 .

1

당신은 재능을 인스턴스화해야하지만이 코드는 SQL 주입에 매우 열려있는 또한 당신이 정말로 된 PreparedStatement를 사용한다 캐릭터 (그리고 어쩌면 파이널) ...

String searchTalentString = "SELECT * FROM TALENT WHERE TALENTID = "+talentID+";";