4

我正在使用列 id 从数据库中获取一个字符串。当我在 SQLite DB 浏览器中输入查询时,它会返回所需的内容,但相同的查询在通过 Java 编码时不返回任何内容。

我的数据库包含一个名为drugs 的表,它有3 列,即drug_id、drug_name 和drug_overview。使用 drug_id 我正在获取 drug_overview。我已经在 db 浏览器中尝试了该查询,该查询从 drug_overview 返回了正确的字符串,但相同的查询在通过 java 编码时没有返回任何内容。

SQLite 数据库浏览器查询:

SELECT * FROM drugs Where drug_id = 50;

JAVA代码:

String query105 = "SELECT * FROM drugs Where drug_id = " + drug_id;
                        Log.e("TESTDB1","Drugs table query: " + query105);
                        Cursor c105 = db.rawQuery(query105,null);

                        if (c105 != null){

                            while (c105.moveToNext()){

                                String overview = c105.getString(c105.getColumnIndexOrThrow("drug_overview"));
                                Log.e("TESTDB1","Overview: " + overview);

                            }

                            c105.close();

                        }

预期结果是概述:阿昔洛韦是一种抗病毒药物。它减缓了疱疹病毒在体内的生长和传播。它不能治愈疱疹,但可以减轻感染症状。阿昔洛韦用于治疗由疱疹病毒引起的感染,如生殖器疱疹、唇疱疹、带状疱疹和水痘,以及水痘(水痘),以及巨细胞病毒。阿昔洛韦也可用于本药物指南中未列出的用途。

实际结果是 Overview: empty 。当我在查询中更改 id 时,它会从不同的药物中给出正确的结果。

4

2 回答 2

0

您的查询返回 0 或 1 行,所以我认为您应该使用c105.moveToFirst()而不是c105.moveToNext(). moveToNext 应该用于列表,而不是单个条目。执行以下操作:

if (c105.moveToFirst()){
         String overview = c105.getString(c105.getColumnIndex("drug_overview"));
         // do something with the result                    
    }
c105.close();
于 2019-03-28T13:27:07.110 回答
0

正如迈克在评论中所说,恐怕您的问题可能与实际数据本身有关,我认为您的文件中的数据库很旧,并且您没有将最新的复制到文件夹中。尝试重新安装和删除旧数据库

于 2019-03-29T13:33:05.747 回答