如何在从数据库中获取空字符串时修复它?
Posted
技术标签:
【中文标题】如何在从数据库中获取空字符串时修复它?【英文标题】:How to fix empty string while fetching it from Database? 【发布时间】:2019-08-19 06:19:30 【问题描述】:我正在使用列 id 从数据库中获取一个字符串。当我在 SQLite DB 浏览器中输入查询时,它会返回所需的内容,但通过 Java 编码时,相同的查询不会返回任何内容。
我的数据库包含一个名为 drug 的表,它有 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();
预期结果是概述:阿昔洛韦是一种抗病毒药物。它减缓了疱疹病毒在体内的生长和传播。它不能治愈疱疹,但可以减轻感染症状。阿昔洛韦用于治疗由疱疹病毒引起的感染,如生殖器疱疹、唇疱疹、带状疱疹和水痘,以及水痘(水痘),以及巨细胞病毒。阿昔洛韦也可用于本药物指南中未列出的用途。
但实际结果是概览: 空 .当我更改查询中的 id 时,它会给出不同药物的正确结果。
【问题讨论】:
"drug_overview" 看起来更像是一个列名而不是 column_index c105.getColumnIndex("drug_overview") 返回列索引 您是否通过删除WHERE
部分检查设备上的数据库是否正确填充?
是的,我的数据库不是空的,因为我可以通过相同的查询获取药物的名称
您缺少这一行 SQLiteDatabase db = this.getReadableDatabase();
【参考方案1】:
我担心您的问题可能与迈克在评论中所说的实际数据本身有关,我认为您的文件中的数据库很旧并且您没有将最新的复制到文件夹中。尝试重新安装和删除旧数据库
【讨论】:
谢谢先生!我必须卸载我的应用程序,然后用新数据库重新安装它! 太好了。很高兴知道您的问题已解决。【参考方案2】:您的查询返回 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();
【讨论】:
嗯,我有多个条目,我正在从中获取药物清单。所以我不得不使用下一个。 c105.moveToNext() 多个条目具有相同的drug_id? 你在检查 c105.moveToNext() 是否为真吗? 您也可以尝试使用getColumnIndexOrThrow来查看您的列名是否拼写错误 没有多个具有不同药物 ID 的条目以上是关于如何在从数据库中获取空字符串时修复它?的主要内容,如果未能解决你的问题,请参考以下文章
当变量有时为空或空字符串时,如何使用 CONTAINS()?
根据 "\s+" 拆分空字符串时的 String#split 行为
传递空字符串时,SQL Server OPENJSON 为日期类型返回 1900-01-01