首页 > 解决方案 > 如何使用 OR 条件搜索 SQLITE 数据库 android?

问题描述

我在 sqlite android 上搜索时遇到问题。

我的输入类型是姓名、电话号码、代码。

我想要的是每当用户在搜索栏中键入以下任何类型的输入时,它应该检查它是否存在于任何给定列上并返回值。

例如,如果用户输入名称 ALAN,则 ALAN 应该返回。如果用户输入代码 Jaxxx1,那么它应该搜索值 Jaxxx1 并返回其对应的数据。如果用户使用电话号码搜索,那么它应该返回其相应的数据。

我得到的是什么。下面是我的代码有人请帮助我。

public List<Contacts> search(String keyword) {
        List<Contacts> contacts = null;
        try {
            SQLiteDatabase sqLiteDatabase = getReadableDatabase();
            Cursor cursor = sqLiteDatabase.rawQuery("select * from " + TABLE_CONTACTS + " where (" + COLUMN_NAME+" or "+COLUMN_CODE +" or "+COLUMN_PNO + ") like ?", new String[]{"%" + keyword + "%"});
            if (cursor.moveToFirst()) {
                contacts = new ArrayList<>();
                do {
                    int id = Integer.parseInt(cursor.getString(0));
                    String cardNo = cursor.getString(1);
                    String name = cursor.getString(2);
                    String jacode = cursor.getString(3);
                    String phno = cursor.getString(4);
                    

                    Contacts contact = new Contacts();
                    contact.setId(id);
                    contact.setCardID(cardNo);
                    contact.setName(name);
                    contact.setJacode(jacode);
                    contact.setPhno(phno);
                    
                    //     Toast.makeText(context,contact.getBalance(),Toast.LENGTH_SHORT).show();


                    contacts.add(new Contacts(id, cardNo, name, jacode, phno, cplan, rent, balance, zone, oldBalance, paidDate, paidAmount, status));
                } while (cursor.moveToNext());
            }
        } catch (Exception e) {
            contacts = null;
        }
        return contacts;
    }

我是这里的新手,请帮助我

标签: javaandroidsqlite

解决方案


我认为你在这一行犯了一个错误

Cursor cursor = sqLiteDatabase.rawQuery("select * from " + TABLE_CONTACTS + " where (" + COLUMN_NAME+" or "+COLUMN_CODE +" or "+COLUMN_PNO + ") like ?", new String[]{"%" + keyword + "%"});

你的陈述应该是这样的:

"select * from " + TABLE_CONTACTS + " where " + COLUMN_NAME + " like ?" + " or " + COLUMN_CODE + " like ?" + " or " + COLUMN_PNO +" like ?", new String[]{"%" + keyword + "%","%" + keyword + "%","%" + keyword + "%"});

请检查声明(如果我忘记了双引号)。为了获得结果,您应该始终注意用户类型(大写或小写),以便您可以使用 SQLite 中已经内置的一些函数。


推荐阅读