2011-10-03 2 views
0

내 안드로이드 응용 프로그램에서 sqlite 데이터베이스에 ormlite를 사용하고 있습니다. 로그인 기반 응용 프로그램이고 SD 카드에 데이터베이스가 있습니다. 사용자 abc의 경우 사용자가 xyz와 같은 다른 사용자로 로그인 한 다음 응용 프로그램이 서버에서 사용자를 인증하고 서버가 사용자 xyz의 db를 대체 할 때 필요합니다. 그러나 로그인 자격 증명에 액세스하려고 시도하면 데이터베이스에 새 자격 증명이 반영되는 동안 이전 자격 증명이 제공됩니다.ormite에서 이전 DAO 객체 가져 오기

나는 또한 시도 : 그것은 또한 작동하지 않습니다

DaoManager.clearCache(); 

나는 노력이 후

DatabaseManager<DatabaseHelper> manager = new DatabaseManager<DatabaseHelper>(); 
manager.releaseHelper(DatabaseHelperGenerator.getDataBaseHelperInstance()) 

내가이 쿼리 해고하려고 할 때 :

Dao<LoginAuthentication, Integer> loginAuthenticationDao = null; 
DatabaseHelperGenerator.getDataBaseHelperInstance(). 
    clearLoginDao(LoginAuthentication.class); 
loginAuthenticationDao = DatabaseHelperGenerator.getDataBaseHelperInstance(). 
    getUserDao(LoginAuthentication.class); 
List<LoginAuthentication> loginAuthenticationList = 
    loginAuthenticationDao.queryForAll(); 

그것은 제공됩니다 IllegalStateException :Database not open

도움을 요청하십시오.

답변

1

여기에 잘못된 방향으로 가고있는 것처럼 보입니다.

  • DAO가 개체를 캐싱하고 있다고 가정하고 있지만 특정 DAO에서 개체 캐시를 사용하도록 설정하지 않은 경우에는 그렇지 않습니다.
  • DaoManager.clearCache() 개체 캐시를 지우지 않고 대신 캐시 된 DAO 개체를 지 웁니다.
  • 도우미를 해제하면 데이터베이스 연결이 닫히고 IllegalStateException을 얻는 이유가됩니다.

응용 프로그램을 디버깅하거나 일부 로깅 값을 사용하여 문제가있는 곳을 확인할 수 있습니다. 다음은 몇 가지 생각입니다.

  • 개체 캐시를 사용하는 경우 사용하지 않으려 했습니까? Dao.clearObjectCache()을 호출하여 객체 캐시를 플러시하려고 했습니까? 다시 말하지만, 캐시를 켠 경우에만 캐시가 존재합니다. 기본적으로 켜져 있지 않습니다.
  • 로그인 정보를 유지하기 위해 어떤 코드를 사용하고 있습니까? 다른 전화와 다른 점이 있습니까?
  • Dao.queryRaw() 방법을 사용하여 삽입 직후 데이터베이스를 덤프하는 방법은 어떻습니까?
  • 모든 거래가 있습니까?

행운을 빈다.

+0

죄송합니다. 나는 며칠 동안 휴가를 떠났으므로 인터넷에 접속할 수 없습니다. 응답 해 주셔서 감사합니다. 처음에는 문제가 무엇인지 알 수 없었습니다. 문제는이 링크 kagii에 의해 제안 같은 http://stackoverflow.com/questions/2493331/what-is-best-practice-with-sqlite-and-android하지만 여전히 모든 문제가 동일한 문제에 직면하고있다 가는 괜찮지 만 값이 테이블에 삽입되지 않습니다. 각 스레드에서 제안 된대로 단일 연결을 사용하고 있지만 문제가 동일하게 유지됩니다. –

+0

Np. 난 당신이 그것을 디버깅해야한다고 생각하고 삽입이 발생하면, adb 셸 도구를 사용하여 데이터베이스를 한번보세요 : http://developer.android.com/guide/developing/tools/adb.html sqlite3 데이터베이스를 검색하기위한 검색 원격 셸. – Gray

+0

나는 이클립스를 사용하고 있으며 코드를 createAndUpdate 메소드에서 디버깅하고 영향을받는 행을 표시하는 것은 예상했던 것과 동일하지만 문제는 db가 여전히 sqlite 브라우저에서 데이터베이스를 열 때입니다 –