使用greenDao根据条件查询数据的时候碰到的问题

在使用greenDao根据条件查询数据的时候碰到问题,现在记录一下。
调用的方法是Dao对象调用queryRaw(String where, String... selectionArg);返回的是一个List。


/** A raw-style query where you can pass any WHERE clause and arguments. */
public List queryRaw(String where, String... selectionArg) {
    Cursor cursor = db.rawQuery(statements.getSelectAll() + where, selectionArg);
    return loadAllAndCloseCursor(cursor);
}


再接着看源码,发现它调用的SQL语句是这样写的:
/** Creates an select for given columns with a trailing space */
public static String createSqlSelect(String tablename, String tableAlias, String[] columns, boolean distinct) {
    if (tableAlias == null || tableAlias.length() < 0) {
        throw new DaoException("Table alias required");
    }
StringBuilder builder = new StringBuilder(distinct ? "SELECT DISTINCT " : "SELECT ");
SqlUtils.appendColumns(builder, tableAlias, columns).append(" FROM ");
builder.append('"').append(tablename).append('"').append(' ').append(tableAlias).append(' ');
return builder.toString();
}


返回的是一个字符串,也就是SQL语句了,以之前的文章的USER表为例,可以看到返回的样式:
SELECT T."_id",T."USERNAME",T."AGE",T."STUDENT_ID" FROM "USER" T 

也就是statements.getSelectAll()返回的上面的SQL语句,所以我们的where参数必须写成"WHERE age = ?",不能直接加条件,我刚开始就是这样子,后来看了源码才发现错误,第二个参数就是想要查询参数的值了,传一个new String[]就可以了。



你可能感兴趣的:(Android)