SQLite 쿼리를 실행하는 데 시간이 너무 오래 걸리면 충돌하는 것처럼 보이는 Android app에 SQLite 쿼리가 있습니다. 그것은 NullPointerException와 충돌하고 라인 번호를 알려줍니다 ...Android SQLite 쿼리가 너무 오래 걸리는 경우 충돌이 발생합니까?
내가 그 줄 주위에 중단 점을 넣을 때 항상 변수로 채워지는 것을 볼 때, 응용 프로그램은 충돌하지 않고 예상 한대로 동작합니다.
따라서 가상 포인터가 없기 때문에 중단 점이 실제로 쿼리 시간을 줄이기 위해 속도를 늦추는 문제가있는 것처럼 보입니다. 중단 점이 없으면 항상 중단되지 않습니다.
다른 사람들은 비슷한 문제가있는 것 같아서 작업을 완료하는 데 오랜 시간이 걸리는 SQLite에 대해 읽은 적이 있지만이 테이블에는 몇 가지 항목 만 있어야합니다. 테스트에는 3 개의 항목, 4 개의 열만 있어야 함)
크래시가 발생하지 않도록하는 방법에 대한 제안? 아마도 쿼리를 만드는 메서드 안에 스레드 대기를 넣을까요? 이 경우 NullPointerException와 충돌 곳에 지금
public void fetchItemsToRemove() throws SQLException{
Cursor mCursor =
mapDb.query(myMain_TABLE, new String[] {myOtherId, myCustomID, myDATE}, null, null, null, null, null);
if(mCursor.moveToFirst())
{
do
{
/*taking "dates" that were stored as plain text strings, and converting them to
*Date objects in a particular format for comparison*/
String DateCompareOld = mCursor.getString(mCursor.getColumnIndex(myDATE));
String DateCompareCurrent = "";
Date newDate = new Date();
DateCompareCurrent = newDate.toString();
try {
DateCompareOld = (String)DateCompareOld.subSequence(0, 10);
DateCompareCurrent = (String)DateCompareCurrent.subSequence(0, 10);
SimpleDateFormat dateType = new SimpleDateFormat("EEE MMM dd");
Date convertDate = dateType.parse(DateCompareOld);
newDate = dateType.parse(DateCompareCurrent);
if(convertDate.compareTo(newDate) < 0)
{
//remove unlim id
mapDb.delete(myMain_TABLE, myDATE + "=" + mCursor.getString(mCursor.getColumnIndex(myDATE)), null);
}
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}while(mCursor.moveToNext());
mCursor.close();
}
else
{
mCursor.close();
}
}
"342"는 문자열의 서브 순서를 얻을 수 DateCompareOld = (String)DateCompareOld.subSequence(0, 10);
입니다. 여기에 도착하고 null 인 경우 이는 문자열이 결코 채워지지 않았다는 것을 의미합니다. String DateCompareOld = mCursor.getString(mCursor.getColumnIndex(myDATE));
너무 오래 걸린 것처럼 쿼리가 그냥 건너 뛴 것처럼 말입니다. 이것은 while 루프에 있음을 유의하십시오. mCursor가 절대로 경계를 벗어나지 않도록 테스트를 수행했습니다.
충돌이 발생한 줄이 포함 된 코드를 게시하십시오. –
SQLite 연결에 제한 시간을 설정 했습니까? 그렇다면 실행이 시작된 후/특정 시간 또는 이후에 임의의 시간이 지나면 일관되게 발생합니까? – jefflunt
"코드와 관련이 있다고 생각하지 않았습니다 ..."- 코드와 logcat 출력은 항상 관련이 있습니다. 독자들을 신경 쓰지 않아도됩니다. ;) – Squonk