FileDocCategorySizeDatePackage
SQLiteQuery.javaAPI DocAndroid 1.5 API6388Wed May 06 22:41:54 BST 2009android.database.sqlite

SQLiteQuery

public class SQLiteQuery extends SQLiteProgram
A SQLite program that represents a query that reads the resulting rows into a CursorWindow. This class is used by SQLiteCursor and isn't useful itself.

Fields Summary
private static final String
TAG
private int
mOffsetIndex
The index of the unbound OFFSET parameter
private String
mQuery
The SQL used to create this query
private String[]
mBindArgs
Args to bind on requery
private boolean
mClosed
Constructors Summary
SQLiteQuery(SQLiteDatabase db, String query, int offsetIndex, String[] bindArgs)
Create a persistent query object.

param
db The database that this query object is associated with
param
query The SQL string for this query.
param
offsetIndex The 1-based index to the OFFSET parameter,


                                             
    /* package */         
        super(db, query);

        mOffsetIndex = offsetIndex;
        mQuery = query;
        mBindArgs = bindArgs;
    
Methods Summary
public voidbindDouble(int index, double value)

        mBindArgs[index - 1] = Double.toString(value);
        if (!mClosed) super.bindDouble(index, value);
    
public voidbindLong(int index, long value)

        mBindArgs[index - 1] = Long.toString(value);
        if (!mClosed) super.bindLong(index, value);
    
public voidbindNull(int index)

        mBindArgs[index - 1] = null;
        if (!mClosed) super.bindNull(index);
    
public voidbindString(int index, java.lang.String value)

        mBindArgs[index - 1] = value;
        if (!mClosed) super.bindString(index, value);
    
public voidclose()

        super.close();
        mClosed = true;
    
intcolumnCountLocked()
Get the column count for the statement. Only valid on query based statements. The database must be locked when calling this method.

return
The number of column in the statement's result set.

        acquireReference();
        try {
            return native_column_count();
        } finally {
            releaseReference();
        }
    
java.lang.StringcolumnNameLocked(int columnIndex)
Retrieves the column name for the given column index. The database must be locked when calling this method.

param
columnIndex the index of the column to get the name for
return
The requested column's name

        acquireReference();
        try {
            return native_column_name(columnIndex);
        } finally {
            releaseReference();
        }
    
intfillWindow(android.database.CursorWindow window, int maxRead, int lastPos)
Reads rows into a buffer. This method acquires the database lock.

param
window The window to fill into
return
number of total rows in the query

        mDatabase.lock();

        boolean logStats = mDatabase.mLogStats;
        long startTime = logStats ? SystemClock.elapsedRealtime() : 0;
        try {
            acquireReference();
            try {
                window.acquireReference();
                // if the start pos is not equal to 0, then most likely window is 
                // too small for the data set, loading by another thread
                // is not safe in this situation. the native code will ignore maxRead
                int numRows = native_fill_window(window, window.getStartPosition(), mOffsetIndex,
                        maxRead, lastPos);

                // Logging
                if (SQLiteDebug.DEBUG_SQL_STATEMENTS) {
                    Log.d(TAG, "fillWindow(): " + mQuery);
                }
                if (logStats) {
                    mDatabase.logTimeStat(true /* read */, startTime,
                            SystemClock.elapsedRealtime());
                }
                return numRows;
            } catch (IllegalStateException e){
                // simply ignore it
                return 0;
            } catch (SQLiteDatabaseCorruptException e) {
                mDatabase.onCorruption();
                throw e;
            } finally {
                window.releaseReference();                
            }
        } finally {
            releaseReference();
            mDatabase.unlock();
        }
    
private final native intnative_column_count()

private final native java.lang.Stringnative_column_name(int columnIndex)

private final native intnative_fill_window(android.database.CursorWindow window, int startPos, int offsetParam, int maxRead, int lastPos)

voidrequery()
Called by SQLiteCursor when it is requeried.

        if (mBindArgs != null) {
            int len = mBindArgs.length;
            try {
                for (int i = 0; i < len; i++) {
                    super.bindString(i + 1, mBindArgs[i]);
                }
            } catch (SQLiteMisuseException e) {
                StringBuilder errMsg = new StringBuilder("mQuery " + mQuery);
                for (int i = 0; i < len; i++) {
                    errMsg.append(" ");
                    errMsg.append(mBindArgs[i]);
                }
                errMsg.append(" ");
                IllegalStateException leakProgram = new IllegalStateException(
                        errMsg.toString(), e);
                throw leakProgram;                
            }
        }
    
public java.lang.StringtoString()

        return "SQLiteQuery: " + mQuery;