有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

将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语句的原因吗?如果没有,当应用程序中没有填写所有字段时,如何使其工作


共 (3) 个答案

  1. # 1 楼答案

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

    您必须将NULL直接放入SQL字符串中,而不带参数。 但不管怎样,当你动态地构造字符串时,你也可以忽略这个比较

  2. # 2 楼答案

    按姓名搜索:

    // 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;
    
  3. # 3 楼答案

    一个快速解决方案应该是这样做:

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

    检查您的sting是否已初始化,如果未初始化,请用虚拟值替换它