2013-03-05 6 views
1

데이터베이스에 몇 가지 값이 있는지 확인하고 싶습니다. 일치하는 경우 메서드는 TRUE를 반환하고 커서가 null이면 FALSE를 반환합니다. 그러나 문제는 값이 데이터베이스에 없더라도 항상 TRUE를 반환한다는 것입니다. 나는 무엇을 놓쳤는가?값이 데이터베이스에 존재하는지 확인하십시오.

// This method check if the combination image path and contact name already exists in database 
public boolean checkContentDatabase(String imageFilePath, String contactName) { 

    String query = "Select * from " + DB_TABLE+ " where " + TABLE_IMAGE_PATH + "='" + imageFilePath + "' and " + TABLE_CONTACT_NAME + "='" + contactName +"' ;"; 

    Cursor c = db.rawQuery(query, null); 

    if(c != null) // Exists in database 
    { 
    return true; 
    } 
    else 
    { 
     return false; 
    } 
} 

답변

5

의 동일 여부를 확인 :

if(c.getCount() > 0) 
{ 
return true; 
} 
else 
{ 
    return false; 
} 
1

커서가 성공적으로 만들어 졌으므로 커서가 null이 아닙니다. 결과 세트 만 존재하지 않습니다. "...에서 1을 SELECT"을 사용하여 시도하고, 결과는 당신의 경우 조건을 바꾸기 1.

+0

또는 "SELECT COUNT (*) "이므로 DBMS는 작업의 더 큰 부분을 수행합니다. –

+0

Count (*)를 사용하면 DBMS가 실제로 수행 할 작업이 있습니다. 테이블에 많은 행이 있고 WHERE 절이 매우 제한적 일 때 DBMS는 무언가를 계산할 시간이 많이 필요합니다. 무언가가 존재하고 얼마나 많은 것이 아닌지 알고 싶기 때문에 전혀 흥미롭지 않습니다 . –

+0

슬프게도, 당신 말이 맞아요. 'IS EMPTY' 나 이와 비슷한 것이 있다면 ... 그러나 그것은 SQL에 부울 값을 요구합니다. –

3

사용 c != null && c.getCount() > 0 대신 c != null

2
 public boolean checkContentDatabase(String imageFilePath, String contactName) { 

String query = "Select * from " + DB_TABLE+ " where " + TABLE_IMAGE_PATH  + "='"   +   imageFilePath + "' and " + TABLE_CONTACT_NAME + "='" + contactName +"' ;"; 

Cursor c = db.rawQuery(query, null); 


      c.moveToFirst(); 
    if(c.isAfterLast() == false) { 
     return true; 
     } 
    else 
     { 
     return false; 
     } 
    } 
관련 문제