2012-03-25 1 views
2

안녕하세요, "Table_Subject"가 있고 제목 이름을 "table_subject"와 비교해야합니다.
제목과 그 제목의 ID를 반환하십시오. 나는 그렇게하지만 어떤 가치를 반환하지 않습니다.
다음은 참조 용 샘플 코드입니다.
힌트 또는 코드를 제공해주십시오.
미리 감사드립니다.Sqlite-android : 문자열을 비교하고 데이터베이스에서 해당 문자열의 ID를 얻는 방법은 무엇입니까?

public int getSubjectId(String subjectName) 
{ 
    int id2 = 0; 
    try 
    { 
     SQLiteDatabase db = this.getWritableDatabase();  
     String selectQuery= "SELECT s_id FROM " + TABLE_SUBJECT; 

     Cursor cursor = db.rawQuery(selectQuery, null); 
      // looping through all rows and adding to list 
      if (cursor.moveToFirst()) 
      { 
       do { 
        if(subjectName.equals(cursor.getString(1))) 
        { 
         id2=cursor.getInt(0);      
        }   
        } 
       while(cursor.moveToNext()); 
       db.close(); 
      } 


    } 
    catch(Exception e) 
    { 
     e.printStackTrace(); 
    } 
    return id2; 

} 
+0

보십시오 로거 및 인쇄를 추가'cursor.getString (1)'와 한 제목을 ... –

+0

두 값 (한 제목과를 인쇄 해보십시오 (cursor.getString (1)). 어쩌면이 파악하는 데 도움이됩니다 무엇이 잘못 되었습니까? –

답변

6

난 당신이 쉽게 한, 일치하는 문자열을 확인하는 적절한 쿼리를 작성하고 ID를 반환하는 대신 자바의 여기에 SQL을 사용하는 것이 좋습니다 것입니다 :

public int getIdForString(String str) { 
    int res; 
    SQLiteDatabase db = getReadableDatabase(); 
    Cursor cursor = db.query(MY_TABLE, new String[] { COLUMN_ID, 
      }, COLUMN_STRING + "=?", 
      new String[] { str }, null, null, null, null); 
    if ((cursor != null) && (cursor.getCount() > 0)) { 
     cursor.moveToFirst(); 
     res = cursor.getInt(cursor.getColumnIndex(COLUMN_ID)); 
    } 
    else { 
     res = NOT_EXIST; 
    } 
    if (cursor != null) { 
     cursor.close(); 
    } 
    return res; 
} 

주의를 이 예제에서 훨씬 더 쉽고 오류가 발생하기 쉬운 많은 상수를 사용했습니다. 이 경우, 상수는 다음과 같습니다

  • MY_TABLE - 문자열, 테이블 이름
  • COLUMN_ID - 문자열의 ID 컬럼의 이름
  • COLUMN_STRING - 문자열, 문자열과 열의 이름
  • NOT_EXIST - int, -1이 발견되지 않았 음을 나타냅니다.
+0

NOT EXIST .....에 오류가 있습니다. ok입니다. 상수입니다. 코드를 사용해 보겠습니다. –

관련 문제