2012-10-19 2 views
0

데이터베이스에서이 오류의 원인을 찾을 수 없습니다.이 문제와 관련하여 이전에 몇 가지 질문을 게시했지만 코드가 길기 때문에 일부를 제거했습니다. stackoverflow가 3000자를 초과하여 게시 할 수 없으므로 같은 선언이있는 항목. 커서를 닫으려면이 메서드를 사용했지만 어떻게 든 문제를 해결할 수 없습니다.원인을 찾을 수 없습니다. 비활성화되거나 닫히지 않은 커서 마무리

public Cursor getMove(){ 
    String[] columns = new String[]{KEY_ID1, KEY_MOVENAME}; 

    Cursor c = null; 
    try { 
     c = ourDatabase.query(DATABASE_TABLE1, columns, null, null, null, null, null); 
    } finally { 
     if(c != null){ 
      c.close(); 
     } 
    } 
    return c; 
} 

어쨌든 [here's] 나는 누군가가 나를 도울 수 있기를 바랍니다 전체 클래스입니다.

public Cursor getMove(){ 
    String[] columns = new String[]{KEY_ID1, KEY_MOVENAME}; 

    Cursor c = null; 
    try { 
     c = ourDatabase.query(DATABASE_TABLE1, columns, null, null, null, null, null); 
    } finally { 
     if(c != null){ 
      c.close(); 
     } 
    } 
    return c; 
} 

난 그냥 코드 행 사용 : 커서를 닫기

+0

어떤 오류가 발생합니까? – dokkaebi

+0

비활성화되거나 닫히지 않은 커서 마무리 – philip

+0

흠, 매번 finally 블록을 가까이에서 호출하면 정상적으로 작동하는 것 같습니다. 전체 코드를 미디어 파이어 대신 요지 또는 페이스트 빈에 게시하면 읽기 쉽습니다. 번역에 몇 가지 구문 오류가 있으므로 번역에서 어떤 것이 손실되었다고 생각합니다. – dokkaebi

답변

0

는 왜이 너무 대신이 오류를 받고 있어요 이유

public Cursor getMove(){ 
    String[] columns = new String[]{KEY_ID1, KEY_MOVENAME}; 

    Cursor c = null; 
    c = ourDatabase.query(DATABASE_TABLE1, columns, null, null, null, null, null); 
    return c; 
} 
0

이유가 될 수있다 당신이 DB 연결의 여러 인스턴스를 사용하고 있으며 사용자가 배포 한 모든 커서를 닫지 않습니다. 당신이 받아들이는 대답은 위험 할 수 있습니다. 이 방법으로 나눠주는 커서를 놓고 있습니까? 당신은 끝내지 않을 경우 결코 공개되지 않을 귀중한 자원을 전화로 가져갈 것입니다.

단일 데이터베이스 인스턴스를 유지하고 (DB 연결을 처리하는 데 싱글 톤을 사용하여) 결국 모든 커서를 닫음으로써이를 해결할 수 있습니다. activity.managedQuery()과 같은 메서드를 호출하여 POJO로 마샬링하고 커서를 즉시 닫거나 커서를 다시 보내고 관리합니다. 안드로이드의 SQL lite locking 메커니즘을 살펴볼 수도 있습니다.

관련 문제