在使用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
调用的方法是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[]就可以了。