gpt4 book ai didi

android - SQLite INNER JOIN 抛出 NullPointerException

转载 作者:太空狗 更新时间:2023-10-29 16:23:05 25 4
gpt4 key购买 nike

我不明白为什么查询最终会抛出 NullPointerException

我的数据库包含两个表。第一个名为 TABLE_WORDS 的包含单词;第二个名为 TABLE_TRANS 的包含翻译。一个词可以有多种翻译。

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

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;
}

最佳答案

好吧,给定你的代码:

Cursor cur = db.rawQuery(query, null); // NullPointer always throws here

这表明 db 为空。该语句中没有其他取消引用操作 - 因此除非堆栈跟踪 实际上 在某处显示 rawQuery,否则 db 为空。您没有给出任何指示 db 应该在哪里分配非空值,但这是要检查的第一件事......

顺便说一句,不要像那样在您的 SQL 中包含值 - 这是 SQL injection attacks 的秘诀.请改用参数化 SQL。

关于android - SQLite INNER JOIN 抛出 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9571008/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com