지난 며칠 동안이 문제를 겪었습니다. 나는 비슷한 질문을 모두 읽었을뿐 아니라 수많은 자습서를 참조했으며, 모든 것이 나에게 잘 보이지만 내 프로그램은 여전히 충돌합니다.Android SQL 충돌 - 해당 열 없음
08-02 15:13:41.876: D/ReminderProvider(1242): main oncreate called
08-02 15:13:41.984: I/dalvikvm(1242): threadid=3: reacting to signal 3
08-02 15:13:42.074: I/dalvikvm(1242): Wrote stack traces to '/data/anr/traces.txt'
08-02 15:13:42.234: D/ReminderListActivity(1242): onCreate
08-02 15:13:42.406: D/ReminderListActivity(1242): Displaying all the reminders in a list
08-02 15:13:42.474: I/dalvikvm(1242): threadid=3: reacting to signal 3
08-02 15:13:42.524: I/dalvikvm(1242): Wrote stack traces to '/data/anr/traces.txt'
08-02 15:13:42.804: D/gralloc_goldfish(1242): Emulator without GPU emulation detected.
08-02 15:13:43.234: D/ReminderProvider(1242): query
08-02 15:13:43.264: I/SqliteDatabaseCpp(1242): sqlite returned: error code = 1, msg = no such column: modified, db=/data/data/com.corsair.android.taskreminder/databases/reminders.db
08-02 15:13:43.274: W/dalvikvm(1242): threadid=11: thread exiting with uncaught exception (group=0x409c01f8)
08-02 15:13:43.374: E/AndroidRuntime(1242): FATAL EXCEPTION: AsyncTask #1
08-02 15:13:43.374: E/AndroidRuntime(1242): java.lang.RuntimeException: An error occured while executing doInBackground()
08-02 15:13:43.374: E/AndroidRuntime(1242): at android.os.AsyncTask$3.done(AsyncTask.java:278)
08-02 15:13:43.374: E/AndroidRuntime(1242): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
08-02 15:13:43.374: E/AndroidRuntime(1242): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
08-02 15:13:43.374: E/AndroidRuntime(1242): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
08-02 15:13:43.374: E/AndroidRuntime(1242): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
08-02 15:13:43.374: E/AndroidRuntime(1242): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
08-02 15:13:43.374: E/AndroidRuntime(1242): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
08-02 15:13:43.374: E/AndroidRuntime(1242): at java.lang.Thread.run(Thread.java:856)
08-02 15:13:43.374: E/AndroidRuntime(1242): Caused by: android.database.sqlite.SQLiteException: no such column: modified: , while compiling: SELECT _id, title FROM reminders ORDER BY modified DESC
08-02 15:13:43.374: E/AndroidRuntime(1242): at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
08-02 15:13:43.374: E/AndroidRuntime(1242): at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:68)
08-02 15:13:43.374: E/AndroidRuntime(1242): at android.database.sqlite.SQLiteProgram.compileSql(SQLiteProgram.java:143)
08-02 15:13:43.374: E/AndroidRuntime(1242): at android.database.sqlite.SQLiteProgram.compileAndbindAllArgs(SQLiteProgram.java:361)
08-02 15:13:43.374: E/AndroidRuntime(1242): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:127)
08-02 15:13:43.374: E/AndroidRuntime(1242): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:94)
08-02 15:13:43.374: E/AndroidRuntime(1242): at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:53)
08-02 15:13:43.374: E/AndroidRuntime(1242): at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:47)
08-02 15:13:43.374: E/AndroidRuntime(1242): at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1564)
08-02 15:13:43.374: E/AndroidRuntime(1242): at android.database.sqlite.SQLiteQueryBuilder.query(SQLiteQueryBuilder.java:354)
08-02 15:13:43.374: E/AndroidRuntime(1242): at android.database.sqlite.SQLiteQueryBuilder.query(SQLiteQueryBuilder.java:291)
08-02 15:13:43.374: E/AndroidRuntime(1242): at com.corsair.android.taskreminder.ReminderListProvider.query(ReminderListProvider.java:133)
08-02 15:13:43.374: E/AndroidRuntime(1242): at android.content.ContentProvider$Transport.query(ContentProvider.java:178)
08-02 15:13:43.374: E/AndroidRuntime(1242): at android.content.ContentResolver.query(ContentResolver.java:311)
08-02 15:13:43.374: E/AndroidRuntime(1242): at android.content.CursorLoader.loadInBackground(CursorLoader.java:56)
08-02 15:13:43.374: E/AndroidRuntime(1242): at android.content.CursorLoader.loadInBackground(CursorLoader.java:42)
08-02 15:13:43.374: E/AndroidRuntime(1242): at android.content.AsyncTaskLoader.onLoadInBackground(AsyncTaskLoader.java:255)
08-02 15:13:43.374: E/AndroidRuntime(1242): at android.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:66)
08-02 15:13:43.374: E/AndroidRuntime(1242): at android.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:55)
08-02 15:13:43.374: E/AndroidRuntime(1242): at android.os.AsyncTask$2.call(AsyncTask.java:264)
08-02 15:13:43.374: E/AndroidRuntime(1242): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
그래서, 내가 존재하지 않는 열을 액세스하기 위해 노력하고 있다고 주장 :
여기하여 로그 캣입니다. 다음은 오류가 발생했다는 ReminderListProvider 쿼리 메서드의 133 번째 줄에있는 비트입니다. 여기
// get the database and run the query
SQLiteDatabase db = mOpenHelper.getReadableDatabase();
Cursor cursor = queryBuilder.query(db, projection, selection,
selectionArgs, null, null, orderby);
은 내가 (내 RemindersTableMetaData이 BaseColumns에 구현 때문에 나는 _id에 대한 선언이없는) 내 열을 선언하고 내 데이터베이스를 생성 코드 :
public static final String REMINDER_TITLE = "title";
public static final String REMINDER_BODY = "body";
public static final String REMINDER_DATE_TIME = "reminder_date_time";
// script to create database
public static final String DATABASE_CREATE_SCHEMA = "create table "
+ DATABASE_TABLE_NAME + " (" + RemindersTableMetaData._ID
+ " integer primary key autoincrement, " + REMINDER_TITLE
+ " text not null, " + REMINDER_BODY + " text not null, "
+ REMINDER_DATE_TIME + " text not null" + ");";
라인 (133)은 queryBuilder.query 호출입니다
String[] uiBindFrom = { RemindersTableMetaData._ID,
RemindersTableMetaData.REMINDER_TITLE };
int[] uiBindTo = { R.layout.layout_reminder_list };
getLoaderManager().initLoader(REMINDER_LIST_LOADER, null, this);
adapter = new SimpleCursorAdapter(this, R.layout.layout_reminder_row,
null, uiBindFrom, uiBindTo, 0);
이슈가 해결 : 그냥이 문제에 실행할 수있는 다른 사람에게 명확하게하기 위해 : 무엇 햅 여기
바로 쿼리 호출하기 전에 호출되는 코드 나는이 방법에 대한 sortOrder 인수가 어떻게 이뤄지는 지 혼란 스러웠다.
이 사용되었다. 나는 이것이 대본 명령과 같다고 생각했다. 예를 들어 LOW_TO_HIGH 또는 무언가를 전달하면 그에 따라 결과가 정렬됩니다. 예, 저는 때때로 바보입니다. 여기서 실제로 전달하고자하는 것은 커서에서 리턴 된 행을 정렬하는 데 사용될 컬럼 이름입니다. 어쨌든, 나는 선언 된 열 이름이 아니며 결과적으로 프로그램이 충돌하는 "수정 된"문자열을 전달하고있었습니다. 저는 제가 데이터베이스를 설정하는 방식에 문제가 있다고 생각 했었습니다. 그리고 그 모든 과정을 거쳐서 내가 잊어 버린 것 같았던 사소한 일이었습니다. 그런 삶입니다. 도움을 주신 모든 분들께 감사드립니다.
// script to create database
public static final String DATABASE_CREATE_SCHEMA = "create table "
+ DATABASE_TABLE_NAME + " (" + RemindersTableMetaData._ID
+ " integer primary key autoincrement, " + REMINDER_TITLE
+ " text not null, " + REMINDER_BODY + " text not null, "
+ REMINDER_DATE_TIME + " text not null" + ");";
당신은 결코 :
충돌이있는 코드가 있습니까? – gkris
주문 별 주문 문이 존재하지 않는 열을 참조합니다. – Mat
예, 무엇이 "수정 된" – javajavajava