나는 Ankidroid에서 가지고 있던 DB 문제를 해결하려고합니다. 다음 문이 실행되었습니다."count (*)"에 대한 rawQuery는 행을 반환하지 않습니다.
SELECT count(*) FROM cards c WHERE type = 1 AND combinedDue <
1335153600.000000
there이 생성되었습니다. 실행 코드는 다음 (github link)입니다 :
이cursor = mDatabase.rawQuery(query, null);
if (!cursor.moveToNext()) {
throw new SQLException("No result for query: " + query);
}
내가, 내가 가야 내가 어떤 기록을 얻을 수있는 방법을 이해할 수 없다 1 또는 0은 로그의 호출 스택은 다음이었다
at com.ichi2.anki.Deck.rebuildRevCount(Deck.java:1351)
Caused by: android.database.SQLException: No result for query: ……
at com.ichi2.anki.AnkiDb.queryScalar(AnkiDb.java:129)
at com.ichi2.anki.Deck._rebuildRevCount(Deck.java:1621)
아이디어가 있으십니까?
사실 나는 비슷한 경우를 더 보았습니다. 하나의 글로벌 레코드와 많은 일일 레코드가있을 수있는 "글로벌"컬럼이있는«통계»테이블이 있습니다. 전역 레코드가 발견되지 않으면 (단순 선택), 우리는 그것을 만듭니다. 제 전화에서 언젠가는 세계 기록이 발견되지 않는 것 같아요. 그래서 우리는 일을 망가 뜨리는 추가 기록을 만듭니다. 정말 위와 같은 경우처럼 보입니다.
편집 :
나는 이유를 발견했다. 다른 스레드에서 AsyncTask는 쿼리가 수행되는 동안 DB를 닫습니다 (GUI에서 트리거되는 많은 처리가 비동기 적으로 수행되기 때문에). 그리고 레코드가없는 커서를 반환합니다.
파일에 추적을 추가하여 보았습니다.
+1 ..이 IMHO를 수행하는 데있어 "표준"이며 읽기 쉬운 방법입니다. – Joe
감사합니다. 나는 그것이 하루에 한 번 발생하기 때문에 즉시 알 수 없습니다. 어쨌든 _rawQuery_는 -1 위치에 커서를 반환해야하기 때문에 이상한 점이 있지만 그 순간 가장 좋은 결과를 얻었습니다. – Fabimaru
작동하는지 알려주세요. – Barak