给定null valueto args

时间:2016-05-02 12:11:19

标签: java android database sqlite cursor

我正在编写一个基本的Android应用程序,其中填写个人信息,如姓名,电子邮件等,并通过按“提交”按钮存储在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确实有效,但是当一个字段(例如email)包含空值时会出错。这不是我应该使用OR语句而不是AND语句的原因吗?如果没有,当应用程序中没有填写所有字段时,如何使其工作?

3 个答案:

答案 0 :(得分:0)

快速修复应该是这样做的:

new String[]{naam == null? "''":naam, etc}

检查您的刺痛是否已初始化,如果不是,请将其替换为虚拟值。

答案 1 :(得分:0)

rawQuery()需要一个字符串数组,但null不是有效的字符串。

您必须将NULL直接放入SQL字符串中,而不使用参数。 但是,无论如何,当你动态地构建字符串时,你也可以省略这种比较。

答案 2 :(得分:-1)

按名称搜索:

// Getting single contact 
Contact getContact(String name) {
SQLiteDatabase db = this.getReadableDatabase();

Cursor cursor = db.query(TABLE_CONTACTS, new String[] { KEY_ID,
        KEY_NAME, KEY_PH_NUM }, KEY_NAME + "=?",
        new String[] { name }, null, null, null, null);
//...

访问:

Contact contact = null;
if (cursor.moveToFirst()) {
contact = new Contact(Integer.parseInt(cursor.getString(0)),
        cursor.getString(1), cursor.getString(2));
}
cursor.close();
// can return null if no contact was found.
return contact;