All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.j256.ormlite.android.AndroidDatabaseResults Maven / Gradle / Ivy

package com.j256.ormlite.android;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.sql.SQLException;
import java.sql.Timestamp;

import android.database.Cursor;

import com.j256.ormlite.dao.ObjectCache;
import com.j256.ormlite.db.DatabaseType;
import com.j256.ormlite.db.SqliteAndroidDatabaseType;
import com.j256.ormlite.support.DatabaseResults;

/**
 * Android implementation of our results object.
 * 
 * @author kevingalligan, graywatson
 */
public class AndroidDatabaseResults implements DatabaseResults {

	private final Cursor cursor;
	private final ObjectCache objectCache;
	private boolean firstCall;
	private static final DatabaseType databaseType = new SqliteAndroidDatabaseType();

	public AndroidDatabaseResults(Cursor cursor, ObjectCache objectCache) {
		this.cursor = cursor;
		this.firstCall = true;
		this.objectCache = objectCache;
	}

	public int getColumnCount() throws SQLException {
		return cursor.getColumnCount();
	}

	public boolean next() throws SQLException {
		boolean returnValue;
		if (firstCall) {
			returnValue = cursor.moveToFirst();
			firstCall = false;
		} else {
			returnValue = cursor.moveToNext();
		}
		return returnValue;
	}

	public int findColumn(String columnName) throws SQLException {
		int index = cursor.getColumnIndex(columnName);
		if (index < 0) {
			/*
			 * Hack here. It turns out that if we've asked for '*' then the field foo is in the cursor as foo. But if we
			 * ask for a particular field list, which escapes the field names, with DISTINCT the fiend names are in the
			 * cursor with the escaping. Ugly!!
			 */
			StringBuilder sb = new StringBuilder(columnName.length() + 4);
			databaseType.appendEscapedEntityName(sb, columnName);
			index = cursor.getColumnIndex(sb.toString());
			if (index < 0) {
				throw new SQLException("Unknown field '" + columnName + "' from the Android sqlite cursor");
			}
		}
		return index;
	}

	public String getString(int columnIndex) throws SQLException {
		return cursor.getString(columnIndex);
	}

	public boolean getBoolean(int columnIndex) throws SQLException {
		if (cursor.isNull(columnIndex) || cursor.getShort(columnIndex) == 0) {
			return false;
		} else {
			return true;
		}
	}

	public char getChar(int columnIndex) throws SQLException {
		String string = cursor.getString(columnIndex);
		if (string == null || string.length() == 0) {
			return 0;
		} else if (string.length() == 1) {
			return string.charAt(0);
		} else {
			throw new SQLException("More than 1 character stored in database column: " + columnIndex);
		}
	}

	public byte getByte(int columnIndex) throws SQLException {
		return (byte) getShort(columnIndex);
	}

	public byte[] getBytes(int columnIndex) throws SQLException {
		return cursor.getBlob(columnIndex);
	}

	public short getShort(int columnIndex) throws SQLException {
		return cursor.getShort(columnIndex);
	}

	public int getInt(int columnIndex) throws SQLException {
		return cursor.getInt(columnIndex);
	}

	public long getLong(int columnIndex) throws SQLException {
		return cursor.getLong(columnIndex);
	}

	public float getFloat(int columnIndex) throws SQLException {
		return cursor.getFloat(columnIndex);
	}

	public double getDouble(int columnIndex) throws SQLException {
		return cursor.getDouble(columnIndex);
	}

	public Timestamp getTimestamp(int columnIndex) throws SQLException {
		throw new SQLException("Android does not support timestamp.  Use JAVA_DATE_LONG or JAVA_DATE_STRING types");
	}

	public InputStream getBlobStream(int columnIndex) throws SQLException {
		return new ByteArrayInputStream(cursor.getBlob(columnIndex));
	}

	public boolean wasNull(int columnIndex) throws SQLException {
		return cursor.isNull(columnIndex);
	}

	public ObjectCache getObjectCache() {
		return objectCache;
	}

	/***
	 * Returns the underlying Android cursor object. This should not be used unless you know what you are doing.
	 */
	public Cursor getRawCursor() {
		return cursor;
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy