2011-12-09 5 views
0

나는 데이터베이스와 관련된 안드로이드 애플 리케이션에서 일하고 있는데, 매우 성가신 버그를 겪었다. 웹에서 가져온 예를 다루고 있습니다.Android 데이터베이스에 저장되지 않은 이유가 무엇인가요?

아래 예제는 잘 작동합니다 (로그캣 오류 없음). 그러나 KEY 문자열의 내용을 변경하려고하면 작동이 멈 춥니 다.

예. KEY_LOCATION = "title"을 KEY_LOCATION = "title1"으로 변경하면 전체 DB가 충돌합니다.

나는 또한 DB 버전 번호를 지금까지 아무런 성공없이 증가 시키려고 시도했다. 어떤 도움이라도 대단히 감사 할 것입니다.

11-29 21:43:02.722: E/SQLiteDatabase(2150):  at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:64) 
    11-29 21:43:02.722: E/SQLiteDatabase(2150):  at android.database.sqlite.SQLiteProgram.compileSql(SQLiteProgram.java:146) 
    11-29 21:43:02.722: E/SQLiteDatabase(2150):  at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1737) 
    11-29 21:43:02.722: E/SQLiteDatabase(2150):  at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1610) 
    11-29 21:43:02.722: E/SQLiteDatabase(2150):  at pirelli.app.dbadapter.PirelliDbAdapter.createReminder(PirelliDbAdapter.java:55) 
    11-29 21:43:02.722: E/SQLiteDatabase(2150):  at pirelli.app.dbadapter.PirelliDbAdapter.createReminder(PirelliDbAdapter.java:55) 
    11-29 21:43:02.722: E/SQLiteDatabase(2150):  at pirelli.app.HSEActivity$1.onClick(HSEActivity.java:149) 
    11-29 21:43:02.722: E/SQLiteDatabase(2150):  at android.view.View.performClick(View.java:3110) 
    11-29 21:43:02.722: E/SQLiteDatabase(2150):  at android.view.View$PerformClick.run(View.java:11934) 
    11-29 21:43:02.722: E/SQLiteDatabase(2150):  at android.os.Handler.handleCallback(Handler.java:587) 
    11-29 21:43:02.722: E/SQLiteDatabase(2150):  at android.os.Handler.dispatchMessage(Handler.java:92) 

답변

1

변경해보십시오 :

private static final String DATABASE_NAME="data"; 
private static final String DATABASE_TABLE="reminders"; 
private static final int DATABASE_VERSION=4; 

public static final String KEY_LOCATION="title1"; 
public static final String KEY_BODY="body"; 
public static final String KEY_DATE_TIME="date_time_value"; 
public static final String KEY_ROW_ID="_id"; 

private DatabaseHelper mDbHelper; 
private SQLiteDatabase db; 

private static final String DATABASE_CREATE = 
     "create table " + DATABASE_TABLE + " ("+ 
       KEY_ROW_ID+ " integer primary key autoincrement, "+ 
       KEY_LOCATION+ " text not null, "+ 
       KEY_BODY+" text not null, "+ 
       KEY_DATE_TIME+ " text not null);"; 

private Context mContext; 

public DbAdapter(Context c){ 
    mContext=c; 
} 


public DbAdapter open() throws android.database.SQLException{ 
    mDbHelper=new DatabaseHelper(mContext); 
    db=mDbHelper.getWritableDatabase(); 
    return this; 
} 

public void close(){ 
    mDbHelper.close(); 
} 

public long createReminder(String title, String body, String dateTime){ 
    ContentValues initialValues = new ContentValues(); 
    initialValues.put(KEY_LOCATION, title); 
    initialValues.put(KEY_BODY, body); 
    initialValues.put(KEY_DATE_TIME, dateTime); 

    return db.insert(DATABASE_TABLE, null, initialValues); 

} 

..................

이 내가지고있어 오류가 있습니다.

private static final String DATABASE_TABLE="reminders"; 

private static final String DATABASE_TABLE="reminders2"; 
+0

내가 한 :

호출이 방법을 데이터베이스를 삭제합니다. 그리고 그것은 충돌합니다, 그것은 제가 말하고있는 것입니다 : D – Eugen

+0

데이터베이스 이름을 변경해 보셨습니까? 대신 테이블? –

+0

테이블과 데이터베이스 이름을 모두 변경해야합니다. 도와 주셔서 정말로 고맙습니다. 에뮬레이터 문제였습니다. 다시 한 번 감사드립니다 – Eugen

1

에이 새로운 데이터를 추가 할 때 이미 이전 테스트에서 데이터베이스의 데이터가 좋은 기회가있다.

데이터를 다른 키 (title1 대신 제목)로 추가 했으므로 데이터베이스 테이블에 title - body - date_time_value - _id 시퀀스 다음에 데이터를 삽입 할 것으로 예상됩니다.

새로운 데이터를 다른 열 이름으로 삽입하기 전에 기존 데이터베이스를 삭제하거나 테이블 이름을 reminders2과 같이 변경하여 다른 테이블을 만들어야합니다.

public void dropTable() { 
     db.execSQL("DROP TABLE IF EXISTS reminders"); 
    } 
+0

Mno ... 그게 효과가 있기를 바랐지만 똑같습니다. 이름 바꾸기와 다른 작업을하기 전에 dropTable 함수를 호출하는 것은 모두 작동하지 않습니다. – Eugen

+0

Hmm 이상합니다. 이전에이 오류가 있었지만 테이블 열을 변경 한 후에 데이터베이스를 비우는 것을 잊었 기 때문에 발생했습니다. 오류의 더 완전한 스택 추적을 게시 할 수 있습니까? 일반적으로 오류는 좀 더 광범위하고 단지'오류 삽입 date_time_value = test2 body = test1 title1 = test' –

+0

내가 얻은 전체 오류 로그로 게시물을 편집했습니다. 희망이 도움이 ... – Eugen

관련 문제