Android SQLite select * from table where name like %key% 使用准备好的语句

标签 android sqlite exception prepared-statement

<分区>

我想使用准备好的语句来防止 Android SQLite 数据库上的 sql 注入(inject)。但是,当查询包含 Like 并使用 Where name = ? 时,rawquery 会崩溃 有没有办法在 Android SQLite 数据库中使用 like 和 prepared 语句?

这是查询:

sqlQuery = "SELECT * FROM " + TABLE_CALLS + " where " + CALLER_NAME + " like ? COLLATE NOCASE or " + CALLER_NBR + " like ? or " + CALLER_EXT + " like ?" + " or " + IS_OUTGOING + " like ?  COLLATE NOCASE or " + TYPE + " like ? COLLATE NOCASE";

Cursor cursor = database.rawQuery(sqlQuery, new String[]{"%" + criterion + "%", "%" + criterion + "%","%" + criterion + "%","%" + criterion + "%","%" + criterion + "%"});

它给出了超出范围的绑定(bind)或列索引 谢谢。

最佳答案

    if (name.length() != 0) {

        name = "%" + name + "%";
    }
    if (email.length() != 0) {
        email = "%" + email + "%";
    }
    if (Phone.length() != 0) {
        Phone = "%" + Phone + "%";
    }
    String selectQuery = " select * from tbl_Customer where Customer_Name like  '"
            + name
            + "' or Customer_Email like '"
            + email
            + "' or Customer_Phone like '"
            + Phone
            + "' ORDER BY Customer_Id DESC";

    Cursor cursor = mDb.rawQuery(selectQuery, null);`

关于Android SQLite select * from table where name like %key% 使用准备好的语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16416827/

相关文章:

java - 如何在Android上的Activity和Fragment中使用EventBus

android - 如何在 Android 中使用单元测试或仪器测试来测试警报管理器

带有双破折号的 Android XML 注释

java - 奇怪的 SQLite 行为 - 非功能性 UPDATE SQLite 方法

java - 集合上的 UnsupportedOperationException

java - Android 中的 android.os.NetworkOnMainThreadException 问题

python - sqlite数据库未连接

android - 如何计算 SQLITE 表中的列数?

WPF DataGrid ItemsSource 绑定(bind)问题

c# - 一种文件读写异常处理,在文件中添加日志记录