2013-01-17 11 views
0

SqlLite에서 삽입 기능을 사용하는 데 어려움을 겪고 있습니다. 다음 스키마로 생성 된 테이블이 있습니다. create table drink_category (_id 정수가 아닌 null 기본 키 autoincrement, 값 고유);Sqlite insertOrThrow()가 실패하여 데이터베이스 파일을 찾을 수 없습니다.

첨부 된 코드가 실행되면 "데이터베이스 파일을 열 수 없습니다 (코드 14)"라는 오류 메시지와 함께 SQLiteCantOpenDatebaseException이 발생합니다.

코드에서 알 수 있듯이 문제없이 쿼리를 사용하여 테이블에 액세스합니다. 또한 db.isOpen()을 수행하여 데이터베이스가 정상인지 확인합니다. 나는 삽입 된 블록 뒤에 코드를 추가하고 모든 것이 정상적으로 작동한다. 어떤 도움이라도 대단히 감사하겠습니다.

public Boolean add(String strValue) 
{ 
    Boolean bStatus = true; 
    String  strSql; 
    String  sqlValue = strValue.replaceAll("'","\'\'"); 

    if (bStatus) 
    { 
     if (strValue.isEmpty()) 
     { 
      BarDB.getInstance().setErrorMessage("No value entered."); 
      bStatus = false; 
     } 
    } 
    if (bStatus) 
    { 
       strSql = "select value from " + "drink_category" + " where value = '" + sqlValue + "' "; 
     Cursor cursor = SqlDbAdapter.getInstance().getDatabase().rawQuery(strSql, null); 

     if (null == cursor) 
     { 
      BarDB.getInstance().setErrorMessage("Problem with the database."); 
      bStatus = false; 

     } 
     else if (cursor.getCount() > 0) 
     { 
      BarDB.getInstance().setErrorMessage("A Drink Category with that name already exists."); 
      bStatus = false; 
     } 
    } 
    if (bStatus) 
    { 
     ContentValues cvValues = new ContentValues(); 
     cvValues.put("value", sqlValue); 
     SQLiteDatabase db = SqlDbAdapter.getInstance().getDatabase(); 

     if (db.isOpen()) 
     { 
      try 
      { 
       long lerror = db.insertOrThrow("drink_category", null, cvValues); 
      } 
      catch (SQLiteException sqle) 
      { 
       BarDB.getInstance().setErrorMessage(sqle.toString()); 
       bStatus = false; 
      } 
     } 
    } 
    return bStatus; 
} 
+0

사실 : 에뮬레이터에서 실행 중이며/data/data에 데이터베이스 파일을 저장하고있었습니다. 당신이 삽입 할 때 sqlite는 저널 파일에 쓰고 해당 디렉토리는 읽기 전용 일 필요가 있다고 생각합니다. 데이터베이스를/data/data//databases로 옮겼는데 이제는 정상적으로 작동합니다. 더 나은 오류 메시지가 훨씬 도움이되었을 것입니다! – user1988510

답변

0

사실 : 저는 이것을 에뮬레이터에서 실행 중이며/data/data에 데이터베이스 파일을 저장하고있었습니다. 당신이 삽입 할 때 sqlite는 저널 파일에 쓰고 해당 디렉토리는 읽기 전용 일 필요가 있다고 생각합니다. 데이터베이스를/data/data // 데이터베이스로 옮겼는데 이제는 정상적으로 작동합니다. 더 나은 오류 메시지가 훨씬 도움이되었을 것입니다!

관련 문제