从数据库中获取空字符串时如何解决?

时间:2019-03-28 12:58:20

标签: android mysql sqlite db-browser-sqlite

我正在使用列ID从数据库中获取一个字符串。当我在SQLite DB浏览器中输入查询时,它返回需要的内容,但是当通过Java进行编码时,相同的查询什么也没有返回。

我的数据库包含一个名为Drugs的表,该表具有3列,即drug_id,drug_name和drug_overview。使用drug_id,我正在获取drug_overview。我尝试在数据库浏览器中查询该查询,该查询从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();

                        }

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

实际结果是概述: 。当我更改查询中的ID时,它会给出使用其他药物的正确结果。

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分:0)

恐怕您的问题可能出在实际数据本身上,正如Mike在评论中说的那样,我认为文件中的数据库很旧,您尚未将最新数据库复制到文件夹中。尝试重新安装和删除旧数据库