Android에서 SQLite 테이블에 값을 삽입 할 때 NullPointerException이 발생하며 그 이유를 알 수 없습니다. 나는 ContentValues와 null에 대한 데이터베이스 인스턴스를 테스트하고있다. SQLite에 데이터를 삽입 할 때 간헐 NPE
이
는 삽입 코드 :public void insertOrIgnore(ContentValues values) {
SQLiteDatabase db = this.dbHelper.getWritableDatabase();
try {
//I added these null value checks to stop NPE, but doesn't help.
if (values != null && db != null) {
db.insertWithOnConflict(TABLE, null, values, SQLiteDatabase.CONFLICT_IGNORE);
}
} catch (SQLiteException e) {
} finally {
if (db != null) {
db.close();
}
}
}
곳
public static final String TABLE = "albums";
이 코드는 예상대로 데이터베이스에 추가 데이터와 함께 작동 대부분의 시간. 그러나 때로는 이며, 드물게은 아래 오류를 생성합니다. 스택 추적은 ACRA에서 왔으며이 오류가 발생하는 조건에서 격리 할 수 없었습니다. 왜 이런 일이 일어나고 조건이 무엇인지에 대한 포인터를 찾고 있습니다. 내 SQLite에 대한 지식은 초보자 수준입니다.
java.lang.NullPointerException
at android.database.sqlite.SQLiteStatement.releaseAndUnlock(SQLiteStatement.java:290)
at android.database.sqlite.SQLiteStatement.executeUpdateDelete(SQLiteStatement.java:96)
at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:2025)
at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1965)
at android.database.sqlite.SQLiteDatabase.beginTransaction(SQLiteDatabase.java:690)
at android.database.sqlite.SQLiteDatabase.beginTransactionNonExclusive(SQLiteDatabase.java:605)
at android.database.sqlite.SQLiteStatement.acquireAndLock(SQLiteStatement.java:247)
at android.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java:112)
at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1844)
at com.mydomain.myapp.albums.AlbumsData.insertOrIgnore(AlbumsData.java:89)
줄 89는 위에 표시된 db.insertWithOnConflict (...) 호출입니다.
필자는 완전한 코드로 답변을 찾는 것이 아니라 오히려 포인터가 잘못되어 무엇이 잘못되었는지에 대한 설명을 찾고 있기 때문에 직접 고칠 수 있습니다.
편집 :
setNativeHandle(mDatabase.mNativeHandle);
은 그래서 데이터베이스 인스턴스가 null 보인다 스택 추적은 NPE가 SQLiteStatement (V 4.03)의 라인 (290)에서 유래 보여줍니다. 트랜잭션이 시작될 때 null을 테스트했을 때 트랜잭션 중에 null이 될 수 있습니까?
"TABLE"이란 무엇입니까? – Simon
TABLE가 null인지 확인 했습니까? –
또한 89 행은 무엇입니까? –