なぜクエリが終了するのかわかりませんNullPointerException
。SQLite INNER JOINがNullPointerExceptionをスローします
私のデータベースには2つのテーブルがあります。最初の単語はTABLE_WORDS
です。 2番目はTABLE_TRANS
と呼ばれ、翻訳が含まれています。 1つの単語は多くの翻訳を持つことができます。
public static final String CREATE_TABLE_WORDS = "CREATE TABLE " + TABLE_WORDS +
" (" + WORDS_ID + " INTEGER PRIMARY KEY, " + WORDS_WORD +
" TEXT);";
public static final String CREATE_TABLE_TRANS = "CREATE TABLE " + TABLE_TRANS +
" (" + TRANS_ID + " INTEGER PRIMARY KEY, " +
TRANS_WORD + " TEXT, " +
TRANS_FOREIGN_ID_WORD + " INTEGER, " +
"FOREIGN KEY (" + TRANS_FOREIGN_ID_WORD + ") REFERENCES " + TABLE_WORDS + "(" + WORDS_ID + "));";
単語IDで翻訳を照会し、NPE
がスローされます。 db
がnullであることを示唆している
Cursor cur = db.rawQuery(query, null); // NullPointer always throws here
:
public Cursor queryTransesByWord(int idSend) {
String query = "SELECT " + DbHelper.TABLE_WORDS + "." + DbHelper.WORDS_WORD + ", " +
DbHelper.TABLE_TRANS + "." + DbHelper.TRANS_WORD +
" FROM " + DbHelper.TABLE_WORDS +
" INNER JOIN " + DbHelper.TABLE_TRANS +
" ON " + DbHelper.TABLE_WORDS + "." + DbHelper.WORDS_ID + "=" +
DbHelper.TABLE_TRANS + "." + DbHelper.TRANS_FOREIGN_ID_WORD + " WHERE " +
DbHelper.TABLE_WORDS + "." + DbHelper.WORDS_ID + "="+ idSend;
Cursor cur = db.rawQuery(query, null); // NullPointer always throws here
if (cur != null)
cur.moveToFirst();
else
Log.e(Constants.LOG_TAG, Constants.DB_ADAPTER_CLASS_NAME_SEP + "queryTransesByWord cursor is null");
return cur;
}
デシベル:-)私の作品がnullではなかった、私は、クエリの前に、それを開くためにgorgot。パブリッククラスDbAdapter { \tプライベートDbHelperヘルパー; \tプライベートSQLiteDatabase db; \t private int openStatus;公共ボイドopenForReading(){ \t \t IF(OPENSTATUS == 0){ \t \t \tデシベル= helper.getReadableDatabase()。 \t \t \t openStatus = 1; \t \t} // IF(OPENSTATUS == 0)他 \t \t \t \t \t IF(OPENSTATUS == 2){ \t \t \t \t helper.close()。 \t \t \t \t db = helper.getReadableDatabase(); \t \t \t} //ネストされた(OPENSTATUS == 2) \t \t \t \t Log.i(Constants.LOG_TAGは、Constants.DB_ADAPTER_CLASS_NAME_SEP + "openForReading成功")場合、 \t} –
@RedPlanet:この場合、表示された行はスタックトレースの先頭には表示されません。 (これがあなたの質問にスタックトレースを含めるべきだった理由です。)しかし、もしあなたが 'openForReading'を呼び出していなければ、' db' *はnullになります... –