2013-05-15 2 views
0

현재 Eclipse와 함께 Android 앱을 개발 중입니다. 데이터베이스를 업데이트하는 동안 문제가 발생했습니다. 문제는 updateFlag 메서드가 호출되는 동안 응용 프로그램이 중단되는 것입니다. updateFlag 메소드는 rowId를 기반으로 한 특정 열만 업데이트합니다.데이터베이스를 업데이트하는 중 앱이 다운 됨

이 SQLiteAdapter 클래스 내 데이터베이스 구조는 :

public long insert(String answer, String question, String hint, String flag, String level){ 

    ContentValues contentValues = new ContentValues(); 
    contentValues.put(KEY_ANSWER, answer); 
    contentValues.put(KEY_QUESTION, question); 
    contentValues.put(KEY_HINT, hint); 
    contentValues.put(KEY_FLAG, flag); 
    contentValues.put(KEY_LEVEL, level); 
    return sqLiteDatabase.insert(MYDATABASE_TABLE, null, contentValues); 
} 

이 업데이트 SQLiteAdapter 클래스의 방법 :

public void updateFlag(long rowId) 
    { 
     ContentValues args = new ContentValues(); 
     args.put(KEY_FLAG, "1"); 
     sqLiteDatabase.update(MYDATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null); 
    } 

그리고 이것은 내가 다른 클래스의 updateFlag 메소드를 호출하는 방법입니다

 mySQLiteAdapterListener2 = new SQLiteAdapter(this); 
     mySQLiteAdapterListener2.openToWrite(); 
     long idListener = Long.parseLong(getId); 
     mySQLiteAdapterListener2.updateFlag(idListener); 
     mySQLiteAdapterListener2.close(); 

내 코드가 잘못되었습니다. 누구든지 올바른 방법으로 rowId를 기반으로 한 특정 열을 업데이트하는 방법을 알고 있습니까?

+3

예외/스택 트랙이란 무엇입니까? – Nick

+0

앱이 충돌하면 항상 logcat을 켜야합니다. –

+0

logcat에 오류가 표시되지 않습니다. –

답변

1

이 시도 :

sqLiteDatabase.update(MYDATABASE_TABLE, args, KEY_ROWID + "=?", new String[] {rowId}); 

마지막 매개 변수 대체 할 그 값을 전달하는 경우 '를?'.

업데이트에 문제가 있다고 가정합니다. 앱이 충돌하는 곳을 알 수 있도록 스택 트레이스를 게시해야합니다.

database.update(String table_name, ContentValues values, String selection, String[] selectionArgs); 

그래서, 쿼리가 아래 updateFlag 방법처럼해야한다 :

2

의 SQLiteDatabase 업데이트 방법은 네 개의 인수를 취합니다. updateFlag 메소드를이 메소드로 바꾸고 이것을 시도하십시오.

public void updateFlag(long rowId) 
    { 
     ContentValues args = new ContentValues(); 
     args.put(KEY_FLAG, "1"); 
     sqLiteDatabase.update(MYDATABASE_TABLE, args, KEY_ROWID + "=?", new String[]{rowId+""}); 
    } 
+0

설명서에 실제로 마지막 두 개의 인수로 null을 지정할 수 있다고 나와 있습니다 .http : //developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#update (java.lang.String, android.content.ContentValues, java.lang.String, String [])) – DigCamara

+0

@DigCamara 물론입니다. 이 경우 모든 행이 영향을받습니다. 설명서를 다시 한 번 확인하십시오. 현재 시나리오에서 마지막 두 개의 인수에'NULL','NULL'을 전달하면 "KEY_FLAG"열에서 모든 행이 값 "1"로 업데이트됩니다. –