将null值赋给args时,java RawQuery不起作用
我正在编写一个基本的安卓应用程序,在这个应用程序中,姓名、电子邮件等个人信息可以通过按下“提交”按钮填充并存储在SQLite数据库中(这一切都非常有效)。然后有一个搜索按钮,当一个字段被填写时,它应该在数据库中搜索对应的人(例如,只有字段名被赋予字符串“harry”,而其他字段保留空值)。这是我的DatabaseHelper类中的相应代码:
public Person getPerson(String naam, String adres, String email, String geslacht,
String leeftijd, String geboortedatum){
Log.i("Main activity","Person to find: "+naam);
SQLiteDatabase db= this.getReadableDatabase();
Cursor curs=db.rawQuery("SELECT name FROM personen WHERE (name = ?) OR (adress = ?) "
+ "OR (email = ?) OR (gender = ?) OR (age = ?) OR (birthday = ?)",
new String[]{naam, adres, email, geslacht, leeftijd, geboortedatum});
Log.i("Main activity", "Query works");
我使用日志来确保错误被抛出的位置,并发现当所有args[]字段都被赋予一个值时,rawQuery确实有效,但当一个字段(例如电子邮件)包含空值时,rawQuery会给出一个错误。这不是我应该使用OR语句而不是AND语句的原因吗?如果没有,当应用程序中没有填写所有字段时,如何使其工作
# 1 楼答案
rawQuery()
需要字符串数组,但null
不是有效字符串您必须将NULL直接放入SQL字符串中,而不带参数。 但不管怎样,当你动态地构造字符串时,你也可以忽略这个比较
# 2 楼答案
按姓名搜索:
访问:
# 3 楼答案
一个快速解决方案应该是这样做:
检查您的sting是否已初始化,如果未初始化,请用虚拟值替换它