2010-12-14 5 views
1

사실, 데이터베이스에 저장된 텍스트 필드 (즉, 고유 값)에 이미 입력 된 동일한 이름을 허용하고 싶지 않습니다.텍스트 필드 값을 텍스트 필드에 입력 된 데이터베이스 값과 비교하는 방법

예를 들어 텍스트 필드에 "health"라는 이름을 입력하고 저장했습니다. 같은 이름을 다시 입력하면 동의하지 않습니다.

아래에서 시도했지만 작동하지 않습니다. 도와주세요. 코드에서

boolean ifExisting(String cat) 
    { 
     Cursor c = db.rawQuery("SELECT * FROM " + "restaurants" + "WHERE" + "category" + "=" + cat, null); 
     if(c.getCount() == 0) 
     { 
      return; 
     } 
      else 
      { 
      return; 
      } 
    } 
     insert(); 

답변

0

세 가지 문제 :

  • 함수는 부울 반환 형식을 가지고 있지만 if 문의 두 경우에 당신이 아무것도을 반환하지 않습니다. 아마도 적절한 부울 값을 반환해야합니까?

  • 모든 sqlite 작업에서 오류가 있는지 확인해야합니다. 그렇지 않으면 그들은 자동으로 실패 할 것이고 당신의 코드는 DB에 일치하는 행이 없다고 가정 할 것입니다.

  • 문자열을 연결하여 SQL 쿼리를 작성하는 것은 불법입니다. 매우 안전하지 않은 관행이며 SQL 주입 공격 등에 대한 코드를 엽니 다. 귀하의 사용자가 cat 텍스트 필드에 "italian"; delete from restaurants을 입력하면 어떻게 될까요? 이를 방지하려면 호스팅 된 매개 변수를 사용해야합니다.

편집 :

이 LadaRaider의 대답에 따라, 당신은 또한 당신의 SQL 쿼리에 몇 공백이 누락 된 것으로 보인다. 또 다른 이유는 이 아니고이 문자열을 연결하여 빌드하는 것입니다.

0

"WHERE"단어 주위에 공백이 없습니다. 이 글을 쓰고 있습니다 :

"SELECT * FROM restaurantsWHEREcategory=" + cat 

공백을 추가하면 더 좋을 것입니다.

그런데 rawQuery를 사용하는 것은 문자열을 구문 분석하는 데 사용 된 시간 때문에 매우 느립니다. 안드로이드 SDK 샘플/디렉토리의 NotePad 응용 프로그램을 살펴 봐야합니다.

+0

다른 사람들에게도이 사실을 알리지 못했습니다. – thkala

관련 문제