Reputation: 1029
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
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