SillyFidget
SillyFidget

Reputation: 197

Android: Sqlite - Moving Values From One Table To Another

I am trying to search for information in one table (DATABASE_FAV_EQUIP_TABLE) based on a value, pull that information, and then place it into another table (DATABASE_EQUIP_TABLE) - checking first if it is not already there. My code is below. Nothing is crashing, and I am not getting any errors, however no information gets placed into the second table (DATABASE_EQUIP_TABLE). I have gone over it several times and cannot figure out why this isn't working.

//takes all equip data from saved equip set, and puts into equip table
public String AddSavedEquipToEquipTable(String name) {

    String[] columns = new String[]{KEY_EQUIP};
    Cursor c = ourDatabase.query(DATABASE_FAV_EQUIP_TABLE, columns, KEY_FAVNAME + "='" + name + "'", null, null, null, null);

    if (c == null){
        return null;
    }
    else if(c != null && c.moveToFirst()) {
        do {

            int iEquip = c.getColumnIndex(KEY_EQUIP);
            String equip = c.getString(iEquip);

            CheckEquipTable(equip);

            c.moveToNext();

            } while (KEY_FAVNAME == name);
        }

    return null;
}


public void CheckEquipTable(String equip){

    String[] columns = new String[]{KEY_EQUIP};
    ContentValues cv = new ContentValues();
    Cursor check = ourDatabase.query(DATABASE_EQUIP_TABLE, columns, KEY_EQUIP + "='" + equip + "'", null, null, null, null);

    if(check == null){              
        cv.put(KEY_EQUIP, equip);
        ourDatabase.insert(DATABASE_EQUIP_TABLE, null, cv);
        }

}

Upvotes: 1

Views: 1408

Answers (2)

Darren Kopp
Darren Kopp

Reputation: 77657

Um, you should be able to do this solely in sqlite. I can help more if I had the table names / columns, but you would basically do a query like this.

INSERT INTO SomeTable(C, D)
SELECT A, B
FROM OtherTable
WHERE NOT EXISTS (
    SELECT 1
    FROM SomeTable 
    WHERE A = C AND B = D 
)

Upvotes: 0

Sam
Sam

Reputation: 86958

Try this:

public void AddSavedEquipToEquipTable(String name) {
    String[] columns = new String[]{KEY_EQUIP};
    Cursor c = ourDatabase.query(DATABASE_FAV_EQUIP_TABLE, columns, KEY_FAVNAME + "='" + name + "'", null, null, null, null);

    int iEquip = c.getColumnIndex(KEY_EQUIP);
    while(c.moveToNext())
        CheckEquipTable(c.getString(iEquip));
}

I'll explain a few changes:

  • The column index of KEY_EQUIP will not change so we only need to retrieve the index once
  • In Java you must compare Strings with if(name.equals(KEY_FAVNAME)) not ==, (KEY_FAVNAME == name) is probably false.
  • ourDatabase.query() will never return null, the smallest result will be an empty Cursor (as in cursor.getCount() == 0)
  • cursor.moveToNext() returns true / false, and when the index is at -1 moveToNext() is the same as moveToFirst(). Also if the Cursor is empty then moveToNext() returns false.

Don't hesitate with any other questions with my suggestion. Hope that helps!

Addition

I didn't notice CheckEquipTable() was checking if a Cursor is null the first time:

if(check == null){

Change it like so:

if(check.getCount() == 0){              

Upvotes: 1

Related Questions