저는 간단한 데이터베이스로 작업하고 있습니다. 세 개의 열이 있습니다. _id (정수 기본 키 autoincrement), jobnumber (text 고유 not null) 및 jobpart (text not null).understandingWithOnConflict를 이해하십시오.
레코드를 시도하고 기존 작업 번호를 입력 할 때까지 모든 것이 제대로 작동합니다. 내가 그 일을하면 애플 리케이션이 충돌하고 강제로 닫습니다.
저는 updateWithOnConflict를 사용하고 있습니다. 정상적으로 종료하고 코드를 반환해야한다고 생각했습니다. 내가 이해하지 못했거나 잘못했는지 확실하지 않은 경우 ...
도움을 주시면 감사하겠습니다.
업데이트 코드 : 로그 캣에서
public int updateJob(long rowId, String jobnumber, String jobpart) {
ContentValues args = new ContentValues();
args.put(JOB_NUMBER, jobnumber);
args.put(JOB_PART, jobpart);
return mDb.updateWithOnConflict(JOB_TABLE, args, JOB_ROWID + "=" + rowId, null, SQLiteDatabase.CONFLICT_ROLLBACK);
}
출력 :
FATAL EXCEPTION: main
android.database.sqlite.SQLiteException: cannot commit - no transaction is active
at android.database.sqlite.SQLiteStatement.native_executeSql(Native Method)
at android.database.sqlite.SQLiteStatement.executeUpdateDelete(SQLiteStatement.java:89)
at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1933)
at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1864)
at android.database.sqlite.SQLiteDatabase.endTransaction(SQLiteDatabase.java:688)
at android.database.sqlite.SQLiteStatement.releaseAndUnlock(SQLiteStatement.java:266)
at android.database.sqlite.SQLiteStatement.executeUpdateDelete(SQLiteStatement.java:96)
at android.database.sqlite.SQLiteDatabase.updateWithOnConflict(SQLiteDatabase.java:1829)
at cdc.gridtest.ScheduleDBAdapter.updateJob(ScheduleDBAdapter.java:325)
at cdc.gridtest.JobEdit.saveState(JobEdit.java:104)
at cdc.gridtest.JobEdit.access$0(JobEdit.java:90)
at cdc.gridtest.JobEdit$1.onClick(JobEdit.java:47)
at android.view.View.performClick(View.java:3110)
at android.view.View$PerformClick.run(View.java:11934)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:132)
at android.app.ActivityThread.main(ActivityThread.java:4123)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:491)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
at dalvik.system.NativeStart.main(Native Method)
실제로 그게 해결책이었습니다. 이 앱의 모든 작업은 한 번에 한 행씩 수행되므로 CONFLICT_IGNORE (내가 당신의 답을 생각할 때까지 고려하지 않은 것) 이외의 다른 작업은 필요 없습니다. 감사! – Barak