Android 如何在从数据库获取空字符串时修复它?

Android 如何在从数据库获取空字符串时修复它?,android,mysql,sqlite,db-browser-sqlite,Android,Mysql,Sqlite,Db Browser Sqlite,我使用列id从数据库中提取字符串。当我在SQLite DB Browser中输入查询时,它会返回所需的内容,但通过Java编码时,相同的查询不会返回任何内容 我的数据库包含一个名为drugs的表,该表有3列,即Druge_id、Druge_name和Druge_overview。使用药物id获取药物概述。我在db browser中尝试了这个查询,它返回drug_overview中的正确字符串,但是当通过java编码时,相同的查询不会返回任何内容 SQLite数据库浏览器查询: SELECT *

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

我的数据库包含一个名为drugs的表,该表有3列,即Druge_id、Druge_name和Druge_overview。使用药物id获取药物概述。我在db browser中尝试了这个查询,它返回drug_overview中的正确字符串,但是当通过java编码时,相同的查询不会返回任何内容

SQLite数据库浏览器查询:

SELECT * FROM drugs Where drug_id = 50;
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();

                        }
JAVA代码:

SELECT * FROM drugs Where drug_id = 50;
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时,它会给出不同药物的正确结果。

您的查询返回0或1行,因此我认为您应该使用
c105.moveToFirst()
而不是
c105.moveToNext()
。moveToNext应该用于列表,而不是单个条目。做一些类似于:

if(c105.moveToFirst()){
字符串概述=c105.getString(c105.getColumnIndex(“药物概述”);
//对结果做点什么
}
c105.关闭();

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

“drug\u overview”看起来更像一个列名,而不是一个列索引xc105.getColumnIndex(“drug\u overview”)返回indexdid列。通过删除
WHERE
部分,您可以检查设备上的数据库是否正确填充?是的,我的数据库不是空的,因为我可以通过相同的查询获取药物名称。您缺少此行SQLiteDatabase db=this.getReadableDatabase();嗯,我有多个条目,我正在从中提取一份药物清单。所以我不得不使用next。c105.moveToNext()具有相同药物id的多个条目?是否正在检查c105.moveToNext()是否为真?您还可以尝试使用getColumnIndexOrThrow查看列名是否有误。没有具有不同药物id的多个条目谢谢!我不得不卸载我的应用程序,然后用新的数据库重新安装,仅此而已!太好了。很高兴知道你的问题已经解决了。