2013-04-09 2 views
0

내가 잘못하고 있는지 확실하지 않지만 테이블의 열에있는 단일 정수 값을 0에서 1로 업데이트하려고합니다. 데이터베이스를 만들 때 실제 활동에, 내가 뭘,하나의 열을 업데이트하면 sqlite 구문 오류가 발생합니다.

for (int i = 0; i < setups.length; i++) { 
     ContentValues values = new ContentValues(); 
     values.put(JokeDbContract.TblJoke.COLUMN_NAME_SETUP, setups[i]); 
     values.put(JokeDbContract.TblJoke.COLUMN_NAME_PUNCHLINE, punchlines[i]); 
     values.put(JokeDbContract.TblJoke.COLUMN_NAME_USED, 0); 

     db.insert(JokeDbContract.TblJoke.TABLE_NAME, null, values); 
    } 

다음 :

private void findNewJoke() { 
    JokeDb jokeDb = JokeDb.getInstance(this); 
    SQLiteDatabase theDb = jokeDb.getDB(); 
    String selection = JokeDbContract.TblJoke.COLUMN_NAME_USED + "=" + 0; 

    // Query database for a joke that has not been used, update the fields 
    // theJoke and thePunchline appropriately 
    String[] columns = {JokeDbContract.TblJoke._ID, 
         JokeDbContract.TblJoke.COLUMN_NAME_PUNCHLINE, 
         JokeDbContract.TblJoke.COLUMN_NAME_SETUP, 
         JokeDbContract.TblJoke.COLUMN_NAME_USED}; 

    Cursor c = theDb.query(JokeDbContract.TblJoke.TABLE_NAME, columns, selection, 
         null, null, null, null); 

    if (c.moveToFirst() == false) { 
     Toast.makeText(this, R.string.error_retrieving_joke, Toast.LENGTH_LONG).show(); 
     Log.e(getString(R.string.app_name),"No jokes retreived from DB in JokeActivity.findNewJoke()!"); 
    } 
    else { 
     ContentValues values = new ContentValues(); 
     theSetup = c.getString(c.getColumnIndexOrThrow(JokeDbContract.TblJoke.COLUMN_NAME_SETUP)); 
     thePunchline = c.getString(c.getColumnIndexOrThrow(JokeDbContract.TblJoke.COLUMN_NAME_PUNCHLINE)); 

     String updateSelection = JokeDbContract.TblJoke.COLUMN_NAME_SETUP + "=" + theSetup; 

     values.put(JokeDbContract.TblJoke.COLUMN_NAME_USED, 1); 

     theDb.update(JokeDbContract.TblJoke.TABLE_NAME, values, updateSelection, null); 
    } 
} 

I 업데이트에 오류가 받고 있어요 :

, 내가 사용하는 제로 컬럼의 모든 값을 설정
java.lang.RuntimeException: .... while compiling: UPDATE jokes SET used=? 
WHERE setup=Why do programmers always mix up Halloween and Christmas? 

사용 된 열에 대해 실제 값을 설정하지 않은 것처럼 보입니다. 프로그램이 궁극적으로하는 일은 사이클 = 농담 = 중고품 = 0이고, 그 다음에 세트를 보았을 때 1로 사용됩니다. 따라서 쿼리는 아직 사용되지 않은 농담 만 가져옵니다. 나는 단순한 무언가를 놓치고 있다는 느낌을 가지고있다.

답변

4

인용 부호에 문제가 있다고 생각합니다.

예 :

String updateSelection = JokeDbContract.TblJoke.COLUMN_NAME_SETUP + "=\"" + theSetup + "\""; 

그러나,이 작업을 수행하기 위해 권장되는 방법은 다음과 같습니다

theDb.update(JokeDbContract.TblJoke.TABLE_NAME, values, JokeDbContract.TblJoke.COLUMN_NAME_SETUP + " = ?", new String[] { theSetup }); 

필드를 사용하는 것이 좋습니다 =이 저는 믿습니다 (sqlite가 캐시 쿼리를 할 수 있기 때문에?).

+0

그게 전부입니다. 여기에서는 SET 절을 사용하여 구문 오류가 발생하여 값이 잘못 설정되었다고 생각했습니다. 당신의 도움을 주셔서 감사합니다. –

관련 문제