otaku
otaku

Reputation: 1029

How do I update the details of a specific button in my SQLdatabase for my android app?

I have done my tutorial here : Tutorial link

I have been able to add and use the database I created succesfully however I now want to update a specific button. My approach is that I'm going through all the buttons and looking for the button with text that matches the one i'm searching for (I will have unique button texts all the time) and when i get a match i'm just updating the values and performing the db.update(..) but it isn't updating the database.
Here is my code for the database :

package com.example.oslabproject;

import java.util.LinkedList;
import java.util.List;


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 SQLDatabase extends SQLiteOpenHelper{


static final String dbName="DB";

//BUTTONS TABLE FOR BUILDINGS ACTIVITY
static final String BuildingTable="BuildingButtons";
static final String ButtonId="ButtonID";
static final String ActivityName="ActivityName";
static final String BuildingButtonText="ButtonText";
static final int version=1;

//BUTTONS TABLE FOR FLOORS ACTIVITY
static final String FloorTable="FloorButtons";
static final String FloorId="ButtonID";
static final String BuildingName="BuildingName";
static final String FloorButtonText="ButtonText";

//BUTTONS TABLE FOR ROOMS ACTIVITY
static final String RoomTable="RoomButtons";
static final String RoomId="RoomID";
//static final String BuildingName="BuildingName";
static final String FloorName="FloorName";
static final String RoomButtonText="ButtonText";


private static final String[] COLUMNS = {ButtonId,ActivityName,BuildingButtonText};

public SQLDatabase(Context context) {
    
      super(context, dbName, null,version);
      
      }

public void onCreate(SQLiteDatabase db) {
      
      
      db.execSQL("CREATE TABLE "+BuildingTable+" ("+ButtonId+ " INTEGER PRIMARY KEY, "+
              ActivityName+" TEXT, "+BuildingButtonText+ " TEXT )");
      
      db.execSQL("CREATE TABLE "+FloorTable+" ("+FloorId+ " INTEGER PRIMARY KEY, "+
              BuildingName+" TEXT, "+FloorButtonText+ " TEXT )");
      
      db.execSQL("CREATE TABLE "+RoomTable+" ("+RoomId+ " INTEGER PRIMARY KEY, "+
              BuildingName+" TEXT, "+FloorName+" TEXT, "+RoomButtonText+ " TEXT )");
      
        
      //    create ContentValues to add key "column"/value
        ContentValues values = new ContentValues();
        NewButton button=new NewButton();
        values.put(ButtonId, button.getId());
        values.put(ActivityName, "Buildings"); 
        values.put(BuildingButtonText, "Apna SJT");
        db.insert(BuildingTable, null, values);
        
        values.put(ButtonId, button.getId()+1);
        values.put(ActivityName, "Buildings");
        values.put(BuildingButtonText, "Apna TT");
        db.insert(BuildingTable, null, values);

      
      
      
     }
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
      
      
      db.execSQL("DROP TABLE IF EXISTS "+BuildingTable);
      db.execSQL("DROP TABLE IF EXISTS "+FloorTable);
      db.execSQL("DROP TABLE IF EXISTS "+RoomTable);
      this.onCreate(db);
     }


//TODO ----------------------------- ADD BUTTONS-------------------------------------



public void addBuildingButton(NewButton button) {
    Log.d("add button", "adding button"+button.getButtonText());
    //  get reference to writable DB
    SQLiteDatabase db = this.getWritableDatabase();

    //  create ContentValues to add key "column"/value
    ContentValues values = new ContentValues();
    
    values.put(ButtonId, button.getId());
    values.put(ActivityName, button.getActivityName()); 
    values.put(BuildingButtonText, button.getButtonText());

    // 3. insert
    db.insert(BuildingTable,  null,values); 
    db.close(); 
}

public void addFloorButton(NewButton button) {
Log.d("add button", "adding button"+button.getButtonText());
    //  get reference to writable DB
    SQLiteDatabase db = this.getWritableDatabase();

    //  create ContentValues to add key "column"/value
    ContentValues values = new ContentValues();
    
    values.put(FloorId, button.getId());
    values.put(BuildingName, button.getBuildingName()); 
    values.put(FloorButtonText, button.getButtonText());

    // 3. insert
    db.insert(FloorTable, null, values); 
    Log.d("add floor button", button.getBuildingName()+" "+button.getButtonText());
    db.close(); 
}

public void addRoomButton(NewButton button) {
    Log.d("add button", "adding button"+button.getButtonText());
    //  get reference to writable DB
    SQLiteDatabase db = this.getWritableDatabase();

    
    ContentValues values = new ContentValues();
    
    values.put(RoomId, button.getId());
    values.put(BuildingName, button.getBuildingName()); 
    values.put(FloorName, button.getFloorName());
    values.put(RoomButtonText, button.getButtonText());
    
    db.insert(RoomTable,  null,  values);
    
    Log.d("add room button", button.getBuildingName()+" "+button.getButtonText());
    db.close(); 
}





// TODO ---------------------------------------GET BUTTONS------------------------------------

public List<String> getAllBuildingButtons(String activity_name) {
    
       List<String> buttons = new LinkedList<String>();
 
       //build the query
       String query = "SELECT  * FROM " + BuildingTable;
 
       //get reference to writable DB
       SQLiteDatabase db = this.getWritableDatabase();
       Cursor cursor = db.rawQuery(query, null);
 
       
       if (cursor.moveToFirst()) {
           do {
               NewButton button = new NewButton();
               
               button.setId(Integer.parseInt(cursor.getString(0)));
               button.setActivityName(cursor.getString(1));
               button.setButtonText(cursor.getString(2));
               
               if(button.getActivityName().equals(activity_name))
                   buttons.add(button.getButtonText());
               
           } while (cursor.moveToNext());
       }
       db.close();
       return buttons;
   }

public List<String> getAllFloorButtons(String building_name) {
    
       List<String> buttons = new LinkedList<String>();
 
       //build the query
       String query = "SELECT  * FROM " + FloorTable;
 
       //get reference to writable DB
       SQLiteDatabase db = this.getWritableDatabase();
       Cursor cursor = db.rawQuery(query, null);
 
       
       if (cursor.moveToFirst()) {
           do {
               NewButton button = new NewButton();
               
               button.setId(Integer.parseInt(cursor.getString(0)));
               button.setBuildingName(cursor.getString(1));
               button.setButtonText(cursor.getString(2));
               
               if(button.getBuildingName().equals(building_name))
               {
                    buttons.add(button.getButtonText());
                    Log.d("floor buttons" , button.getButtonText());
               }
           } while (cursor.moveToNext());
       }
       db.close();
       return buttons;
   }

public List<String> getAllRoomButtons(String building_name,String floor_name) {
    
       List<String> buttons = new LinkedList<String>();
 
       //build the query
       String query = "SELECT  * FROM " + RoomTable;
 
       //get reference to writable DB
       SQLiteDatabase db = this.getWritableDatabase();
       Cursor cursor = db.rawQuery(query, null);
 
       
       if (cursor.moveToFirst()) {
           do {
               NewButton button = new NewButton();
               
               button.setId(Integer.parseInt(cursor.getString(0)));
               button.setBuildingName(cursor.getString(1));
               button.setFloorName(cursor.getString(2));
               button.setButtonText(cursor.getString(3));
               
               if(button.getBuildingName().equals(building_name) && button.getFloorName().equals(floor_name))
               {
                    buttons.add(button.getButtonText());
                    Log.d("floor buttons" , button.getButtonText());
               }
           } while (cursor.moveToNext());
       }
       db.close();
       return buttons;
   }



// TODO ----------------UPDATE BUTTONS------------------------------------------


public void updateBuildingButton(String oldbuttontext, String newbuttontext) {
     
     String query = "SELECT  * FROM " + BuildingTable;
     
       
       SQLiteDatabase db = this.getWritableDatabase();
       Cursor cursor = db.rawQuery(query, null);
       
       NewButton button=null;
       if (cursor.moveToFirst()) {
           do {
               
                button = new NewButton();
               
               button.setId(Integer.parseInt(cursor.getString(0)));
               button.setActivityName(cursor.getString(1));
               button.setButtonText(newbuttontext);
               
               if(button.getButtonText().equals(oldbuttontext))
               {
                   Log.d("updating button","match found for "+button.getButtonText());
                   
                   Log.d("old button",button.getActivityName()+" "+button.getButtonText());
                   ContentValues values = new ContentValues();
                   values.put(ButtonId, button.getId());
                   values.put(ActivityName,button.getActivityName());
                   values.put(BuildingButtonText, button.getButtonText());
                   
                   int i=db.update(BuildingTable, values,BuildingButtonText+" = ?", 
                        new String[] { oldbuttontext });
                   
                   //db.execSQL("UPDATE "+BuildingTable+" SET "+BuildingButtonText+"='"+newbuttontext+
                //         "'  WHERE     "+ButtonId+"='"+String.valueOf(button.getId())+"'");
                   Log.d("updating button return value",String.valueOf(i));
               }
               
           } while (cursor.moveToNext());
       }
       db.close();
       
       db = this.getWritableDatabase();
 
       cursor = db.rawQuery(query, null);
       if (cursor.moveToFirst()) {
           do {
               button = new NewButton();
               
               button.setId(Integer.parseInt(cursor.getString(0)));
               button.setActivityName(cursor.getString(1));
               button.setButtonText(cursor.getString(2));
               Log.d("buttons in buildin table",button.getButtonText());
           }while (cursor.moveToNext());
       }
       db.close();
    
}













//------------------------------------------------------------------------------


//no use right now
public NewButton getButton(int id){
     
    // 1. get reference to readable DB
    SQLiteDatabase db = this.getReadableDatabase();
 
    // 2. build query
    Cursor cursor = 
            db.query(BuildingTable, // a. table
            COLUMNS, // b. column names
            " id = ?", // c. selections 
            new String[] { String.valueOf(id) }, // d. selections args
            null, // e. group by
            null, // f. having
            null, // g. order by
            null); // h. limit
 
    // 3. if we got results get the first one
    if (cursor != null)
        cursor.moveToFirst();
 
    // 4. build book object
    NewButton button1 = new NewButton();
    button1.setId(Integer.parseInt(cursor.getString(0)));
    button1.setActivityName(cursor.getString(1));
    button1.setButtonText(cursor.getString(2));
 

 
    // 5. return book
    return button1;
}




//------------------------------------------------------------------------


//TESTING PURPOSE
public void deleteall()
{
    SQLiteDatabase db = this.getWritableDatabase();
    db.delete(BuildingTable,null,null);
    db.delete(FloorTable,null,null);
    db.delete(RoomTable,null,null);
}

    
    

}

Here is my NewButton class:

package com.example.oslabproject;



public class NewButton {
    
    private static int id=0;
    private static String ActivityName;
    private static String ButtonText;
    private static String BuildingName;
    private static String RoomName;
    private static String FloorName;
    
    NewButton()
    {
        
        setId(id);
        id++;
    }

    public String getButtonText() {
        return ButtonText;
    }

    public void setButtonText(String buttonText) {
        ButtonText = buttonText;
    }

    public String getActivityName() {
        return ActivityName;
    }

    public void setActivityName(String activityName) {
        ActivityName = activityName;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        NewButton.id = id;
    }

    public  String getBuildingName() {
        return BuildingName;
    }

    public void setBuildingName(String buildingName) {
        BuildingName = buildingName;
    }

    public String getRoomName() {
        return RoomName;
    }

    public void setRoomName(String roomName) {
        RoomName = roomName;
    }

    public String getFloorName() {
        return FloorName;
    }

    public void setFloorName(String floorName) {
        FloorName = floorName;
    }

}

I tried renaming mybuilding1 to renamedmybuilding Here's my logcat

01-27 17:15:03.945: D/add button(1372): adding buttonmybuilding1
01-27 17:15:19.446: D/updating button(1372): match found for mybuilding1
01-27 17:15:19.456: D/buttons in buildin table(1372): Enter Building name
01-27 17:15:19.456: D/buttons in buildin table(1372): mybuilding
01-27 17:15:19.476: D/buttons in buildin table(1372): mybuilding1

I added a return value to my db.update and checked it in logcat and it is 1. So i suppose the update function did work correctly but my database wasnt updated

Upvotes: 0

Views: 110

Answers (1)

PaF
PaF

Reputation: 3477

It seems like you are doing nothing in this function but updating the DB. Why not go the easy way?

public void updateBuildingButton(String oldbuttontext, String newbuttontext) {
    SQLiteDatabase db = getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put(BuildingButtonText, newbuttontext);
    int i=db.update(BuildingTable, values,BuildingButtonText+" = ?", 
                    new String[] { oldbuttontext });
    Log.d("updating button return value",String.valueOf(i));
    db.close();
}

Upvotes: 1

Related Questions