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