de.greenrobot.dao.query.CountQuery Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of DaoCore Show documentation
Show all versions of DaoCore Show documentation
greenDAO is a light and fast ORM for Android
The newest version!
package de.greenrobot.dao.query;
import android.database.Cursor;
import de.greenrobot.dao.AbstractDao;
import de.greenrobot.dao.DaoException;
public class CountQuery extends AbstractQuery {
private final static class ThreadLocalQuery extends ThreadLocal> {
private final String sql;
private final AbstractDao dao;
private final String[] initialValues;
private ThreadLocalQuery(AbstractDao dao, String sql, String[] initialValues) {
this.dao = dao;
this.sql = sql;
this.initialValues = initialValues;
}
@Override
protected CountQuery initialValue() {
return new CountQuery(this, dao, sql, initialValues.clone());
}
}
static CountQuery create(AbstractDao dao, String sql, Object[] initialValues) {
ThreadLocalQuery threadLocal = new ThreadLocalQuery(dao, sql, toStringArray(initialValues));
return threadLocal.get();
}
private final ThreadLocalQuery threadLocalQuery;
private CountQuery(ThreadLocalQuery threadLocalQuery, AbstractDao dao, String sql, String[] initialValues) {
super(dao, sql, initialValues);
this.threadLocalQuery = threadLocalQuery;
}
public CountQuery forCurrentThread() {
CountQuery query = threadLocalQuery.get();
String[] initialValues = threadLocalQuery.initialValues;
System.arraycopy(initialValues, 0, query.parameters, 0, initialValues.length);
return query;
}
/** Returns the count (number of results matching the query). Uses SELECT COUNT (*) sematics. */
public long count() {
checkThread();
Cursor cursor = dao.getDatabase().rawQuery(sql, parameters);
try {
if (!cursor.moveToNext()) {
throw new DaoException("No result for count");
} else if (!cursor.isLast()) {
throw new DaoException("Unexpected row count: " + cursor.getCount());
} else if (cursor.getColumnCount() != 1) {
throw new DaoException("Unexpected column count: " + cursor.getColumnCount());
}
return cursor.getLong(0);
} finally {
cursor.close();
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy