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

来源:互联网 发布:中俄贸易数据统计 编辑:程序博客网 时间:2024/06/05 05:36
在使用greenDao根据条件查询数据的时候碰到问题,现在记录一下。
调用的方法是Dao对象调用queryRaw(String where, String... selectionArg);返回的是一个List。


/** A raw-style query where you can pass any WHERE clause and arguments. */
public List<T> 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[]就可以了。



0 0
原创粉丝点击