I have written a class 'clsDB', please see source below.  I'm testing it in
the emulator and the first time around it runs fine without error, then on
the second run eclipse jumps into the Class File Editor for
SQLiteCursor.class.  The application continues to run without exception or
error, but eclipse suggests everything isn't quite right.

I have try / catch clauses everywhere I interact with the database and none
seem to capture the fault.  Looking at the Debug window, I can see an
IllegalStateException thrown by SQLiteCursor.finalize() line:603, then
NativeStart.run() line: not available [native method].

This class encapsulates all my database activity.


/**
 * File:
 *     clsDB.java
 *
 * Notes:
 *     Contains the class clsDB.  This class manages the database SQLite
interface
 *
 * Methods:
 *    clsDB                - Constructor
 *    getImgResource        - Returns a Image resource from database
 *    getImgResources        - Returns an array containing all image
resource id's
 *    insertResourceId    - Insert resource identifier into database
 *    onCreate            - Called when database is created
 *    onUpdate            - Called when database is updated
 *******************************************************************************
 * History:
 * 12/06/2011 SP, Created class
 */
package uk.co.cantley.avasig;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class clsDB extends SQLiteOpenHelper {
    private static final String TAG = "clsDB";

    private static final int    DB_VERSION = 1;
    private static final String DB_NAME = "avasig";
    private static final String TBL_IMG = "tblImgs";
// Image fields
    private static final String IMG_ID      = "imgID";
    private static final String IMG_RESID = "resID";
/**
 * Constructor
 * @param context, the application context
 */
    public clsDB(Context context) {
        super( context, DB_NAME, null, DB_VERSION );
    }
/**
 * Method:
 *     getImgResource
 *
 * Parameters:
 *     intResId, the image resource identifier
 *
 * Returns:
 *     The record identifier
 */
    public int getImgResource( int intResId ) {
        try{
            SQLiteDatabase db = getWritableDatabase();
            Cursor cursor = db.rawQuery(
                    "SELECT " +
                        "* " +
                    " FROM " +
                        TBL_IMG +
                    " WHERE " +
                        IMG_RESID + "='" + intResId + "'",
                    new String[] {} );
            if ( cursor != null ) {
                if ( cursor.moveToFirst() == true ) {
                    int intColIdx = cursor.getColumnIndex( IMG_RESID );
                    return cursor.getInt( intColIdx );
                }
            }
        } catch( Exception ex ) {
            Log.e(TAG, ex.getMessage() );
        }
        return -1;
    }
/**
 * Method:
 *    getImgResources
 *
 * Parameters:
 *     none
 *
 * Returns:
 *     An array of image resource identifiers
 */
    public int[] getImgResources() {
        try{
            SQLiteDatabase db = getWritableDatabase();
            Cursor cursor = db.rawQuery(
                    "SELECT " +
                        "* " +
                    " FROM " +
                        TBL_IMG,
                    new String[] {} );
            if ( cursor != null ) {
                int intCount = cursor.getCount();

                if ( intCount > 0 ) {
                    int[] aryResIds = new int[intCount];
                    if( cursor.moveToFirst() == true ) {
                        int intColIdx = cursor.getColumnIndex( IMG_RESID );
                        int i = 0;
                        do{
                            aryResIds[i++] = cursor.getInt( intColIdx );
                        } while( cursor.moveToNext() == true );
                    }
                    return aryResIds;
                }
            }
        } catch( Exception ex ) {
            Log.e(TAG, ex.getMessage() );
        }
        return null;
    }
/**
 * Method:
 *     insertResourceId
 *
 * Parameters:
 *     intResId, the image resource identifier
 *
 * Returns:
 *     The record identifier
 */
    public long insertResourceId( int intResId ) {
        try{
            int intTmp = getImgResource( intResId );

            if ( intTmp > 0 ) {
// This record already exists, abort!
                return intResId;
            }
            SQLiteDatabase db = getWritableDatabase();
            ContentValues cv = new ContentValues();
            cv.put(IMG_RESID, intResId);
            return db.insertOrThrow(TBL_IMG, IMG_RESID, cv);
        } catch( Exception ex ) {
            Log.e(TAG, ex.getMessage() );
        }
        return -1;
    }
/**
 * Method:
 *     onCreate
 *
 * Parameters:
 *     db, the database
 *
 * Returns:
 *     none
 */
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL( "CREATE TABLE " + TBL_IMG + " ( " +
                      IMG_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                      IMG_RESID + " INTEGER NOT NULL )" );
     }
/**
 * Method:
 *     onUpgrade
 *
 * Parameters:
 *     db, the database
 *  intOld, the old version
 *  intNew, the new version
 *
 * Returns:
 *     none
 */
    @Override
    public void onUpgrade(SQLiteDatabase db, int intOld, int intNew) {
        db.execSQL( "DROP TABLE IF EXISTS " + TBL_IMG );
        onCreate( db );
     }
}


-- 
Regards,
Sy

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to